jpa使用WHERE子句

jpa使用WHERE子句,jpa,one-to-many,Jpa,One To Many,我有两个实体: @Entity public class Elements implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private Owner owner; } @Entity public class Owner implements Serializable { @Id @GeneratedValu

我有两个实体:

@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;
}
@实体
公共类元素实现可序列化{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
私人业主;
}
@实体
公共类所有者实现可序列化{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
@OneToMany(fetch=FetchType.LAZY)
列出要素;
}
假设我想从Elements表中获取所有与所有者相关的elemets,然后使用:

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

query.setParameter("elemOwner", ownerObjectFetchFromDataBase);

List<TrendUsers> userList=query.getResultList();
TypedQuery query=em.createQuery(“从元素elem中选择元素elem
元素所有者:=elemOwner“,Elements.class);
setParameter(“elemOwner”,ownerObjectFetchFromDataBase);
List userList=query.getResultList();
但我得到了以下错误: 不支持“BLOB”和“BLOB”之间的比较。类型必须具有可比性。字符串类型还必须具有匹配的排序规则。 如果排序规则不匹配,一种可能的解决方案是强制转换操作数,使其成为默认排序规则

有什么方法可以从Elements表和WHERE子句中选择使用object(而不仅仅是String,int…)

(p.s.我也尝试了下面的查询,但没有成功: TypedQuery query=em.createQuery(“从Elements elem中选择elem,其中elem.owner.id:=elemOwner”,Elements.class”); setParameter(“elemOwner”,ownerObjectFetchFromDataBase.id); List userList=query.getResultList(); )


谢谢

您需要将所有者标记为als a

@实体公共类元素实现可序列化{
剪
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“OWNER\u ID”)
私人业主;
}
@实体公共类所有者实现可序列化{
剪
@OneToMany(fetch=FetchType.LAZY,mappedBy=“owner”)
列出要素;
}
现在,您尝试将序列化的所有者存储在Blob中。这不是你想要的;-)

享受


编辑:包含xatavt的修复程序

您需要将所有者标记为als a

@实体公共类元素实现可序列化{
剪
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“OWNER\u ID”)
私人业主;
}
@实体公共类所有者实现可序列化{
剪
@OneToMany(fetch=FetchType.LAZY,mappedBy=“owner”)
列出要素;
}
现在,您尝试将序列化的所有者存储在Blob中。这不是你想要的;-)

享受


编辑:包括Xtavt的修复

,并将
mappedBy=“owner”
添加到
元素
@OneToMany
以定义双向relationship@axtavt:说得好。谢谢我将更新我的帖子,将其包括在内,并将
mappedBy=“owner”
添加到
元素
@OneToMany
,以定义双向relationship@axtavt:说得好。谢谢我会更新我的帖子,包括这一点
@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;
}