Как сослаться на поле столбца соединения (случай @OneToMany) в Hibernate SQL (HQL) запрос? - PullRequest
0 голосов
/ 04 января 2019

У меня есть класс Customer, который имеет следующий геттер:

   @OneToMany
   @JoinColumn(name="CUST_ID") // join column is in table for Order
   public Set<Order> getOrders() {return orders;}

Таким образом, столбец CUST_ID является классом Order.

Как я могу сослаться на этот столбец в HQL?

например.

entityManager.createQuery("FROM Order o WHERE o.CUST_ID = 1")

Нужен ли какой-нибудь геттер или специальная аннотация в классе Order?

В данный момент Hibernate не может распознать столбец (java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property). При обычном SQL я правильно вижу столбец в таблице.

1 Ответ

0 голосов
/ 04 января 2019

Вы должны переместить @JoinColumn в сущность Order и изменить @OneToMany:

Customer :

   @OneToMany(mappedBy = "customer")
   public Set<Order> getOrders() {return orders;}

Order :

@ManyToOne
@JoinColumn(name="CUST_ID")
public Customer getCustomer();

Запрос :

entityManager.createQuery("FROM Order  o INNER JOIN o.customer c WHERE c.custId = 1")

Обычно @JoinColumn предназначен для @ManyToOne.@JoinTable используется вместе с @OneToMany, но в вашем случае это не обязательно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...