我已经使用了两个具有双向 onetomany 关联的实体。我想使用带有投影的标准(仅从几列获取数据)来获得许多Person
带有许多Adress
es 的 s。我想输入的查询结果List<Map<String, Object>>
。结果列表应具有此结构(地址数据应List<Map<String, Object>>
包含在父地址对象中):
[
{
name: "Andrew"
surname: "..."
adress : [
{
city : "New York"
street : "..."
type : "home"
}
{
city : "..."
street : "..."
type : "work:
}
]
{
name: "..."
surname : "..."
address : [{....}]
}
]
实体:
public class Person{
private Long id;
private String name;
private String surname;
private Integer age;
private String phoneNr;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "person", fetch = FetchType.LAZY)
private List<Address> addresses
// getters and setters
}
public class Address{
private Long id;
private String city;
private String street;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="person_id")
private Person person;
// getters and setters
}
我所能做的就是加载整个实体,这不能满足我的需求。
Criteria criteria = currentSession().createCriteria(Person.class);
criteria.setFetchMode("addresses", FetchMode.JOIN);
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
任何建议都会非常有帮助。