Hibernate CriteriaBuilder谓词isMember仅使用实体ID
给定以下实体,如何构造JPA谓词以仅选择那些在其类别集中具有给定ID的类别的项目Hibernate CriteriaBuilder谓词isMember仅使用实体ID,hibernate,jpa,Hibernate,Jpa,给定以下实体,如何构造JPA谓词以仅选择那些在其类别集中具有给定ID的类别的项目 @Entity public class Item { @Id private String id; private String name; @JoinTable(name="category_items", joinColumns={@JoinColumn(name="item_id")}, inverseJoinColumns={@JoinColumn(name="cate
@Entity
public class Item
{
@Id
private String id;
private String name;
@JoinTable(name="category_items",
joinColumns={@JoinColumn(name="item_id")},
inverseJoinColumns={@JoinColumn(name="category_id")})
private Set<Category> categories;
/* etc */
}
@Entity
public class Category
{
@Id
private String id;
private String name;
/* etc */
}
它不在分类表附近
我这样做是因为我想避免在我只需要它的ID(我已经有了)的时候创建或检索一个新的Category实例
谢谢你的帮助 我最终用
join
解决了这个问题,而不是isMember
:
EntityManager em = getEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Item> cq = cb.createQuery( Item.class );
Root from = cq.from( Item.class );
From join = from.join( "categories" );
Path<Item> p = join.get( "id" );
Predicate predicate = cb.equal( p, "my_category_id" );
cq.where( predicate );
cq.select( from );
TypedQuery<Item> typedQuery = em.createQuery( cq );
List<Item> resultList = typedQuery.getResultList();
EntityManager em=getEntityManager();
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(Item.class);
Root-from=cq.from(Item.class);
From join=From.join(“类别”);
路径p=join.get(“id”);
谓词=cb.equal(p,“my_category_id”);
cq.where(谓词);
cq.选择(从中);
TypedQuery TypedQuery=em.createQuery(cq);
List resultList=typedQuery.getResultList();
SELECT item.id, item.name FROM item JOIN category_items ON item.id = category_items.item_id WHERE category_items.category_id=?
EntityManager em = getEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Item> cq = cb.createQuery( Item.class );
Root from = cq.from( Item.class );
From join = from.join( "categories" );
Path<Item> p = join.get( "id" );
Predicate predicate = cb.equal( p, "my_category_id" );
cq.where( predicate );
cq.select( from );
TypedQuery<Item> typedQuery = em.createQuery( cq );
List<Item> resultList = typedQuery.getResultList();