У меня есть следующие таблицы гибернации:
public class Customer {
//some fields... include customerId field
public Person person;
@OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
@JoinColumn(name = "person_id", unique = false, nullable = true, insertable = true, updatable = true)
public Person getPerson e () {
return person;
}
}
public class Person {
//some fields...
private Set<History> histories;
@ManyToMany(fetch=FetchType.LAZY, targetEntity=History.class,cascade={CascadeType.PERSIST,CascadeType.MERGE})
@JoinTable(name="person_m2m_history",joinColumns={@JoinColumn(name="person_id")},
inverseJoinColumns={@JoinColumn(name="persone_history_id")})
public Set<History> getHistories() {
return this.histories;
}
}
А также таблица истории, дизайн которой не актуален.Отношение Клиента к таблице истории является персоной лица.Я хочу получить с помощью HQL (а не нативного) несколько полей клиента, основываясь на его истории, но получил ошибку.Что я сделал неправильно?
Вот мой запрос:
entityManager.createQuery("select c.customerId, ph.changedOn,
ph.changedField, from Customer c
left join fetch c.person p
left join fetch p.histories ph
where ph.changedField = 'name'")
Это ошибка, вызванная CreateQuery:
'org.hibernate.QueryException:запросил указанную выборку соединения, но владелец извлеченной ассоциации не присутствовал в списке выбора [FromElement {явный, не объединение коллекции, извлечение соединения, извлечение не ленивых свойств, classAlias = e, role = myProject.Customer.person,tableName = Person, tableAlias = person1_, origin = customer customer0_, columns = {customer0_.person_id, className = myProejct.Person}}] [select c.customerId, ph.changedOn, ph.changedField, из клиентского c, оставившего выборку присоединения c.человек p оставленный присоединиться к выборке p.histories ph где ph.changedField = 'name'] '