在实体“一对一”映射中使用Criteria API加入

时间:2020-03-13 15:34:20

标签: java jpa spring-data-jpa hibernate-criteria criteria-api

在映射为“一对一”的实体中,我需要使用条件进行加入

示例:

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"));

1 个答案:

答案 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?

相关问题