私は双方向の1対多の関連付けを持つ2つのエンティティに行きました。射影付きの基準を使用して(少数の列からのみデータを取得するため)、多くのesPerson
を持つ多くのsを取得したいと思います。Adress
入れたいクエリの結果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);
どんな提案も非常に役に立ちます。