У меня есть объекты, которые выглядят следующим образом:
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MyEntity {
@Id
private UUID id;
@OneToMany(targetEntity = Relation.class, fetch = FetchType.EAGER)
private List<Relation> relatedList;
}
@Entity
@Data
public class Relation {
@Id
private UUID id;
}
Кроме того, у меня есть другой тип:
@Data
public class OtherType extends MyEntity {
private String otherField;
public OtherType(UUID id, List<Relation> relations, String otherField) {
super(id, relations);
this.otherField = otherField;
}
}
Теперь я хочу выбрать объекты в таблица MyEntity
вместе с некоторой дополнительной информацией (otherField
) в объект типа OtherType
:
select e.id, e.relatedList, 'otherStuff' as otherField from MyEntity e
Если я использую этот запрос с HQL, он преобразует e.relatedList
в . as col_x_x_
, что, очевидно, является синтаксической ошибкой. Я пытался использовать собственный запрос, но это просто говорит о том, что OtherType не является Entity. Если я использую NamedNativeQuery с resultSetMapping, он не может сопоставить список значений с коллекцией (No dialect mapping for JDBC type 1111
). Я также пробовал использовать функцию postgres array_agg
, чтобы получить только массив идентификаторов для моего отношения, но это тоже не может быть отображено. Есть ли какой-либо способ достичь этого, кроме определения конструктора в OtherType
, который принимает одно значение вместо списка, выполняя фактическое реальное соединение SQL (где каждый экземпляр Relation
добавляет еще одну MyEntity
строку) и сопоставить это потом?