Со следующими объектами:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Parent {
@Id
private Long id;
}
@Entity
public class ChildOne extends Parent {
private String label;
private String propertyOne;
}
@Entity
public class ChildTwo extends Parent {
private String label;
private String propertyTwo;
}
@Entity
public class ChildThree extends Parent {
private String specialLabel;
}
Я выполняю следующий запрос querydsl:
QParent parent = QParent.parent;
JPAQuery<Tuple> query = new JPAQuery<>(em)
.select(
parent.as(QChildOne.class).label,
parent.as(QChildOne.class).propertyOne,
parent.as(QChildTwo.class).label,
parent.as(QChildTwo.class).propertyTwo,
parent.as(QChildThree.class).specialLabel
)
.from(parent);
List<Tuple> result = query.fetch();
Ожидаю следующий результат
| label1 | prop1 | null | null | null |
| null | null | label2 | prop2 | null |
| null | null | null | null | label3 |
однако сгенерированный запрос смешивает поля с одинаковыми именами (в данном случае label
).
Вот запрос, сгенерированный Hibernate:
select parent0_1_.label as col_0_0_,
parent0_1_.property_one as col_1_0_,
parent0_1_.label as col_2_0_,
parent0_3_.property_two as col_3_0_,
parent0_2_.special_label as col_4_0_
from parent parent0_
left outer join child_one parent0_1_ on parent0_.id = parent0_1_.id
left outer join child_three parent0_2_ on parent0_.id = parent0_2_.id
left outer join child_two parent0_3_ on parent0_.id = parent0_3_.id
Как видите, псевдонимы, используемые в select, не соответствуют ожидаемым.
Есть ли способ указать, что я хочу, чтобы первая метка исходила от объекта child1, а вторая - от объект child2?