在映射为“一对一”的实体中,我需要使用条件进行加入
示例:
public class Item {
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "transcation_id")
private Transaction transaction;
private String status;
...
...
}
public class Transaction {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
...
...
}
我的查询基于实体“交易”,但是我想获取实体“项目”的属性“状态”
我需要在我的方法中执行以下操作:
predicates.add(root.join("?????").get("????").in("STATUS_OK"));
答案 0 :(得分:1)
我现在也在尝试学习标准API,所以这只是一个疯狂的猜测:
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<String> searchQuery = criteriaBuilder.createQuery(String.class);
Root<Transaction> root = searchQuery.from(Transaction.class);
Join<Transaction, Item> itemJoin = itemJoin.join(statusList);
List<Predicate> restrictions = new ArrayList<>();
restrictions.add(criteriaBuilder.equal(itemJoin.get(status), root.get(???)));
searchQuery.select(status).where( restrictions.toArray(new Predicate[0] ));
TypedQuery<Status> query = em.createQuery(searchQuery);
List<Status> result = query.getResultList();
状态列表是否需要在Item.class中创建,类似于以下内容?:
@OneToMany(mappedBy = "status")
List<status> statusList;
也可以在这里看看:JOIN with CriteriaQuery?