Я пытаюсь получить атрибут от объекта B (полезная нагрузка) через подзапрос.Однако, если я устанавливаю псевдоним, я получаю следующую ошибку:
org.hibernate.QueryException: не ассоциация: полезная нагрузка
Если я удаляю псевдоним, ошибка изменится на:
org.hibernate.HibernateException: Неизвестная сущность: null
Важная информация:
Класс A является классом основного запроса, а Aимеет отношение один-к-одному с классом C. Класс C имеет отношение один-ко-многим с классом B.
@Entity
@Table(name = "A")
public class A{
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "C_ID")
private C c;
}
@Entity
@Table(name = "C")
public class C{
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "entityC")
@Cascade({CascadeType.ALL})
List<B> bs;
}
@Entity
@Table(name = "B")
public class B{
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "C_ID")
private C entityC;
}
Запрос выглядит так:
Criteria query = sessionFactory.getCurrentSession().createCriteria(A.class,"a")
final DetachedCriteria dc = DetachedCriteria.forClass(B.class, "b");
dc.add(Restrictions.isNotNull("b.payload"));
dc.addOrder(Order.asc("b.id"));
dc.add(Restrictions.eqProperty("b.entityC", "c"));
dc.add(Restrictions.sqlRestriction("LIMIT 1"));
dc.setProjection(Projections.property("b.entityC.id"));
query.add(Subqueries.propertyIn("c.id", dc));
...
query.createAlias("c", "c");
Цель этого запроса - подключить ADTO с атрибутом для полезной нагрузки B, как показано в следующем примере:
query.setProjection(Projections.projectionList()
.add(Projections.groupProperty("b.payload").as("payload"))
...
query.setResultTransformer(new AliasToBeanResultTransformer(ADTO.class));