Присоединяйтесь, используя Criteria API, в сущности, сопоставленной «один к одному» - PullRequest
0 голосов
/ 13 марта 2020

Мне нужно сделать соединение, используя критерии, в сущности, сопоставленной «один к одному»

пример:

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;
    ...
    ...

}

мой запрос основан на сущности «Транзакция» Тем не менее, я хочу получить атрибут "status" объекта "Item"

Мне нужно сделать что-то подобное в моем методе:

     predicates.add(root.join("?????").get("????").in("STATUS_OK"));

1 Ответ

0 голосов
/ 19 марта 2020

Я тоже сейчас пытаюсь изучить 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 нужно создать statusList с чем-то вроде этого?:

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

Также можно посмотреть здесь: ПРИСОЕДИНИТЬСЯ к CriteriaQuery?

...