给定以下实体,我如何构造一个 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="category_id")})
private Set<Category> categories;
/* etc */
}
@Entity
public class Category
{
@Id
private String id;
private String name;
/* etc */
}
如果我手头有 Category 对象,我想我可以做到:
Predicate buildPredicate( CriteriaBuilder cb, Root root, Category category )
{
Expression<Collection<Category>> categories = root.get( "categories" );
return cb.isMember( category, categories );
}
但我的问题是:我可以只使用 Category.id 字符串吗?在 SQL 中,它类似于
SELECT item.id, item.name FROM item JOIN category_items ON item.id = category_items.item_id WHERE category_items.category_id=?
它不在类别表附近。
我问是因为我想避免在我只需要它的 ID 时创建或检索新的 Category 实例,而我已经拥有了它。
谢谢你的帮助!