JPA基準を学び、理解しようとしています。これまでのところ、私は SQL で非常に有能であり、Hibernate Criteria と HQL でかなり有能です。
OR ステートメントでかなり単純な選択をしようとしています。
プレーン SQL では、私の select は次のようになります。
SELECT * FROM CHANGED_LOG
WHERE key1 = 52540 AND objectCode = 'Order'
OR key1 = 48398 AND objectCode = 'Package'
これにより、key1 = 52540 で objectCode が Order に等しいすべての行と、key = 48398 で objectCode が Package に等しいすべての行が得られます。これはまさに私が欲しいものです。
したがって、JPA基準(非常に複雑に思えます...)でこれを実行しようとすると、これまでの私の最善の推測は次のとおりです。
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<ChangedLogBean> query = builder.createQuery(ChangedLogBean.class);
Root<ChangedLogBean> from = query.from(ChangedLogBean.class);
CriteriaQuery<ChangedLogBean> select = query.select(from);
Predicate orderChangedLogBeans = builder.conjunction();
builder.and(orderChangedLogBeans, builder.equal(from.get("key1"), orderId));
builder.and(orderChangedLogBeans, builder.equal(from.get("objectCode"), ChangedLogBean.ObjectType.OrderBean));
Predicate packageChangedLogBeans = builder.conjunction();
builder.and(packageChangedLogBeans, builder.equal(from.get("key1"), packageId));
builder.and(packageChangedLogBeans, builder.equal(from.get("objectCode"), ChangedLogBean.ObjectType.PackageBean));
Predicate orderOrPackage = builder.disjunction();
orderOrPackage.getExpressions().add(orderChangedLogBeans);
orderOrPackage.getExpressions().add(packageChangedLogBeans);
query.where(orderOrPackage);
return entityManager.createQuery(select).getResultList();
わお。単純なクエリには多くの行があります...それでも、これはDBからすべての行を返します。
ここで何が間違っていますか?
役に立つ回答をありがとう:)