Glad it worked.

I'll see what can be done about preventing this kind of bug in the future.

--j

On Thu, Jan 22, 2009 at 4:58 PM, Charles F. Munat <c...@munat.com> wrote:

>
> Thank you! Thank you! Thank you! Thank you! Thank you!
>
> That worked. I should've seen it though as I'd already made that fix on
> other sites. I don't know how I missed it. Tired, I guess.
>
> Pressure off now for a moment at least.
>
> Chas.
>
> Jorge Ortiz wrote:
> > Ahh, I see what the problem might be. There was another change to
> EnumvType:
> >
> > Replace this line:
> >   return et.valueOf(value)
> > With this line:
> >   return et.valueOf(value).getOrElse(null)
> >
> > I'm sorry this is causing you so much trouble Chas. I made changes to
> > classes in JPADemo and didn't realize they were used as template code
> > for other projects.
> >
> > Perhaps these classes should be rolled into a lift-jpa module so that
> > everyone can share the same code?
> >
> > --j
> >
> > On Thu, Jan 22, 2009 at 3:16 PM, Charles F. Munat <c...@munat.com
> > <mailto:c...@munat.com>> wrote:
> >
> >
> >     I have an entity thus:
> >
> >     @Entity
> >     @Table{val name = "cocktails"}
> >     class Cocktail extends BaseEntity {
> >       @Id
> >       @GeneratedValue{val strategy = GenerationType.AUTO}
> >       var id : Long = _
> >
> >       var name : String = ""
> >
> >       var description : String = ""
> >
> >       var ingredients : String = ""
> >
> >       @Column{val name = "file_name"}
> >       var fileName : String = ""
> >
> >       @Column{val name = "is_archived"}
> >       var isArchived : Boolean = false
> >
> >       @Type{val `type` = "com.xxx.model.CocktailGroupType"}
> >       @Column{val name="cocktail_group"}
> >       var cocktailGroup: CocktailGroup.Value = CocktailGroup.Originals
> >     }
> >
> >
> >
> >     Which uses this enumeration:
> >
> >     object CocktailGroup extends Enumeration with Enumv {
> >       val Originals = Value("Originals")
> >       val Contemporaries = Value("Contemporaries")
> >       val Classics = Value("Classics")
> >       val Others = Value("Others")
> >     }
> >
> >     class CocktailGroupType extends EnumvType(CocktailGroup) {}
> >
> >
> >
> >     Which is queried thus in orm.xml:
> >
> >     <named-query name="findCocktailsByGroup">
> >       <query><![CDATA[from Cocktail c
> >         where c.isArchived = false
> >         and c.cocktailGroup = :cocktailGroup
> >         order by c.name <http://c.name>]]></query>
> >     </named-query>
> >
> >
> >
> >     And called from CocktailOps.scala:
> >
> >     120: val cocktails = Model.createNamedQuery[Cocktail](
> >            "findCocktailsByGroup",
> >            "cocktailGroup" -> "Originals").findAll
> >
> >
> >
> >     Using Enumv:
> >
> >     trait Enumv  {
> >
> >       this: Enumeration =>
> >
> >       private var nameDescriptionMap =
> >         scala.collection.mutable.Map[String, String]()
> >
> >       def Value(name: String, desc: String) : Value = {
> >         nameDescriptionMap += (name -> desc)
> >         new Val(name)
> >       }
> >
> >       def getDescriptionOrName(ev: this.Value) = {
> >         try {
> >           nameDescriptionMap(""+ev)
> >         } catch {
> >           case e: NoSuchElementException => ev.toString
> >         }
> >       }
> >
> >       def getNameDescriptionList =  this.elements.toList.map(
> >         v => (v.toString, getDescriptionOrName(v) ) ).toList
> >     }
> >
> >
> >
> >     And EnumvType:
> >
> >     abstract class EnumvType(val et: Enumeration with EnumTrait)
> >       extends UserType {
> >
> >       val SQL_TYPES = Array({Types.VARCHAR})
> >
> >       override def sqlTypes() = SQL_TYPES
> >
> >       override def returnedClass = classOf[et.Value]
> >
> >       override def equals(x: Object, y: Object): Boolean = {
> >         return x == y
> >       }
> >
> >       override def hashCode(x: Object) = x.hashCode
> >
> >       override def nullSafeGet(resultSet: ResultSet,
> >                                names: Array[String],
> >                                owner: Object): Object = {
> >         val value = resultSet.getString(names(0))
> >         if (resultSet.wasNull()) return null
> >         else {
> >           return et.valueOf(value)
> >         }
> >       }
> >
> >       override def nullSafeSet(statement: PreparedStatement,
> >                                value: Object,
> >                                index: Int): Unit = {
> >         if (value == null) {
> >           statement.setNull(index, Types.VARCHAR)
> >         } else {
> >           val en = value.toString
> >           statement.setString(index, en)
> >         }
> >       }
> >
> >       override def deepCopy(value: Object): Object = value
> >
> >       override def isMutable() = false
> >
> >       override def disassemble(value: Object) =
> >         value.asInstanceOf[Serializable]
> >
> >       override def assemble(cached: Serializable, owner: Object):
> >         Serializable = cached
> >
> >       override def replace(original: Object,
> >                            target: Object,
> >                            owner: Object) = original
> >
> >     }
> >
> >
> >     Which gets me this error:
> >
> >     Exception occured while processing /drinks/
> >
> >     Message: javax.persistence.PersistenceException:
> >     org.hibernate.PropertyAccessException: could not set a field value by
> >     reflection setter of com.xxx.model.Cocktail.cocktailGroup
> >
> >
>  
> org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)
> >            org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:75)
> >            com.xxx.model.ScalaQuery.getResultList(JPA.scala:82)
> >            com.xxx.model.ScalaQuery.findAll(JPA.scala:77)
> >            com.xxx.snippet.CocktailOps.originals(CocktailOps.scala:120)
> >
> >
> >
> >
> >     I have tried everything I can think of. This used to work before the
> >     recent switch to 2.7.3. Can anyone spot the problem?
> >
> >     Thanks. Website down. Am really screwed here.
> >
> >     Chas.
> >
> >
> >
> >
> > >
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to