【问题标题】:jpa Using WHERE clausejpa 使用 WHERE 子句
【发布时间】:2011-06-25 10:45:09
【问题描述】:

我有 2 个实体:

@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;
}

假设我想从 Elements Table 中获取属于所有者的所有元素,然后我使用:

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”之间的比较。类型必须具有可比性。字符串类型也必须有匹配的排序规则。 如果排序规则不匹配,可能的解决方案是将操作数强制转换为默认排序规则...

有什么方法可以从 Elements Table 中选择并在 WHERE 子句中使用对象(而不仅仅是 String、int...)?

(p.s 我也试过下面的查询,但没有用: TypedQuery query=em.createQuery("SELECT elem FROM Elements elem WHERE elem.owner.id:=elemOwner", Elements.class); query.setParameter("elemOwner", ownerObjectFetchFromDataBase.id); 列出 userList=query.getResultList(); )

谢谢

【问题讨论】:

    标签: jpa one-to-many


    【解决方案1】:

    您需要将所有者标记为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 的修复

    【讨论】:

    • 并将mappedBy = "owner"添加到elements'@OneToMany以定义双向关系
    • @axtavt:好点。谢谢。我将更新我的帖子以包含该内容
    猜你喜欢
    • 2011-01-27
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 2019-03-15
    • 2015-01-30
    • 1970-01-01
    相关资源
    最近更新 更多