У меня есть следующая модель, и я борюсь с ней, чтобы получить результаты из моего запроса:
@Entity
public class MyData {
@Id
private String id;
@Column(name = "security_id")
private Long securityId;
@Version
private Long version;
@OneToOne
@JoinColumn(name = "id", referencedColumnName = "id")
private MyDataDetails myDataDetails;
MyData() {
}
//other fields here
//omitted getters/setters
}
@Entity
public class MyDataDetails {
@Id
private String id;
@Version
private Long version;
@Column(name = "owner")
private String owner;
@Column(name = "created_on")
private LocalDateTime createdOn;
MyDataDetails() {
}
//other fields here
//omitted getters/setters
}
Теперь я хотел бы запрашивать только столбцы: id, securityId и myDataDetails, которые ссылаются на сущность MyDataDetails (не завершена) объект, потому что он имеет много других свойств, и я хотел бы иметь лучшую производительность).
Когда я пишу запрос:
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Tuple> query = builder.createTupleQuery();
Root<MyData> root = query.from(MyData.class);
///query.select(root).distinct(true);
root.fetch(MyDataDetail_.myDataDetails, JoinType.LEFT);
query.distinct(true).multiselect(
root.get(MyDataDetail_.id),
root.get(MyDataDetail_.securityId), root.get(MyDataDetail_.myDataDetails));
entityManager.createQuery(query).getResultList().stream()
.map(tuple -> new MyDto(tuple.get(0, String.class), null, null, null, null, null, null, null, null,
null, null, null, 0, tuple.get(13, MyDataDetails.class)))
.collect(Collectors.toList());
У меня есть следующее исключение:
Причина: java .lang.IllegalArgumentException: org.hibernate.QueryException: в запросе указана выборка соединения, но владелец извлеченной ассоциации не присутствует в списке выбора [FromElement {явный, не объединение в коллекцию, извлечение в соединении , получить не ленивые свойства, classAlias = generateAlias1, role = MyData.myDataDetails, tableName = *, tableAlias = *** da1_, origin = **** *, столбцы = {** * 0 .id, className = MyDataDetails}}] [выберите отдельный генерированныйAlias0.id, генерированныйAlias0.securityId, генерируемыйAlias0.myDataDetails из MyData в качестве генерированного atedAlias0.myDataDetails как генерируемый Alias1, где ((1 = 1) и (generateAlias0.owningAuthority =: param0)) и (1 = 1)]