【问题标题】:Join using Criteria API, in entity mapped "one to one"在“一对一”映射的实体中使用 Criteria API 加入
【发布时间】:2020-06-25 15:15:10
【问题描述】:

我需要在“一对一”映射的实体中使用条件进行连接

示例:

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

【问题讨论】:

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


    【解决方案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();
    

    statusList 需要在您的 Item.class 中创建类似这样的东西吗?:

    @OneToMany(mappedBy = "status")
    List<status> statusList;
    

    也可以看这里:JOIN with CriteriaQuery?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多