2011-02-11 97 views
0

我有2个实体:JPA使用WHERE子句

@Entity 
public class Elements implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    private Owner owner; 

} 

@Entity 
public class Owner implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @OneToMany(fetch=FetchType.LAZY) 
    List<Elements> elements; 
} 

假设我想获取所有elemets从元素表bellonging给业主和therfore我用:

TypedQuery query=em.createQuery("SELECT elem FROM Elements elem WHERE 
         elem.owner:=elemOwner", Elements.class); 

query.setParameter("elemOwner", ownerObjectFetchFromDataBase); 

List<TrendUsers> userList=query.getResultList(); 

但我得到以下错误: 不支持'BLOB'和'BLOB'之间的比较。类型必须具有可比性。字符串类型也必须具有匹配的排序规则。 如果排序规则不匹配,一个可能的解决方案是强制操作数强制它们到默认排序规则...

有没有什么办法可以从元素表中选择并在WHERE子句中使用对象(而不仅仅是String ,INT)?

(PS我也尝试下面的查询,并没有奏效: TypedQuery查询= em.createQuery( “SELECT FROM ELEM元素ELEM WHERE elem.owner.id:=elemOwner”,Elements.class); query.setParameter( “elemOwner”,ownerObjectFetchFromDataBase.id); 列表用户列表= query.getResultList(); )

感谢

回答

3

您需要标记所有者ALS一个ManyToOne

@Entity public class Elements implements Serializable { 
    ...snip ... 
    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="OWNER_ID") 
    private Owner owner; 
} 

@Entity public class Owner implements Serializable { 
    .. snip ... 
    @OneToMany(fetch=FetchType.LAZY, mappedBy="owner") 
    List<Elements> elements; 
} 

现在您尝试将序列化的所有者存储在Blob中。那你想;-)

享受

编辑不算什么:包括由xatavt修复

+1

并添加`的mappedBy = “所有者”``到elements`”`@ OneToMany`定义双向关系 – axtavt 2011-02-11 10:37:16