私は JPA を使用しており、指定された親 ( )Product
のすべての子エンティティ ( )を選択しようとしています。関係はです。likeを作成せずに、1 つのクエリに抑えたいと思います。List
Category
Category OneToMany Product
Predicate
product.get("category") == category.get(0) || product.get("category") == category.get(1) || ...
次のコードを試してみましたが、うまくいかないようです (一番下のスタックに見られるように)。これを達成する方法について誰か提案がありますか?
コード
public List<Product> findProductsBy(List<Category> categories) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Product> query = cb.createQuery(Product.class);
Root product = query.from(Product.class);
Predicate predicateCategory = product.get("category").in(categories);
query.select(product).where(predicateCategory);
return em.createQuery(query).getResultList();
}
スタック
WARNING: Local Exception Stack:
Exception [EclipseLink-6075] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.QueryException
Exception Description: Object comparisons can only use the equal() or notEqual() operators. Other comparisons must be done through query keys or direct attribute level comparisons.
Expression: [
Relation operator [ IN ]
Query Key category
Base (...).Product