我有以下课程:
人.java
class Person {
String name;
Set<Hotel> visitedHotels;
String someOtherData;
public Person() {}
public Person(String name, Set<Hotel> visitedHotels) {
this.name;
this.visitedHotels = this.visitedHotels;
}
// getters & setters
}
酒店.java
class Hotel {
// some code
}
出于安全原因,有时不应加载“someOtherData”。
所以我尝试了以下 HQL:
select new Person( p.name , elements(p.visitedHotels) ) from Person p
or
select new Person( p.name , hotels ) from Person p left join p.visitedHotels hotels
但它不起作用 - 错误:无法在类 Person 上找到适当的构造函数。
是否可以将酒店集合与人名一起选择?
查看带有集合映射的 Blaze-Persistence 实体视图。这可能正是您正在寻找的:https://persistence.blazebit.com/documentation/entity-view/manual/en_US/index.html#collection-mappings https://persistence.blazebit.com/documentation/entity-view/manual/en_US/index.html#collection-mappings
允许有一个单独的 DTO,例如
@EntityView(Person.class)
interfae PersonView {
String getName();
Set<Hotel> getVisitedHotels();
}
Usage in the query like
CriteriaBuilder<PersonView> cb = entityViewManager.apply(
EntityViewSetting.create(PersonView.class),
criteriaBuilderFactory.create(Person.class)
);
List<PersonView> list = cb.getResultList();
创建一个查询,例如
SELECT person.name, visitedHotels_1 FROM Person person LEFT JOIN person.visitedHotels visitedHotels_1
由于您似乎使用它来进行可视化,因此我建议也将 Hotel 映射为实体视图。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)