Подзапрос Критерии Hibernate - HibernateException: Неизвестная сущность: нуль - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь получить атрибут от объекта 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));
...