質問したいのですが、複数レベルの深さのクエリ プロジェクションと基準を作成することは可能ですか? 私は2つのモデルクラスを持っています:
@Entity
@Table(name = "person")
public class Person implements Serializable {
@Id
@GeneratedValue
private int personID;
private double valueDouble;
private int valueInt;
private String name;
@OneToOne(cascade = {CascadeType.ALL}, orphanRemoval = true)
@JoinColumn(name="wifeId")
private Wife wife;
/*
* Setter Getter
*/
}
@Entity
@Table(name = "wife")
public class Wife implements Serializable {
@Id
@GeneratedValue
@Column(name="wifeId")
private int id;
@Column(name="name")
private String name;
@Column(name="age")
private int age;
/*
* Setter Getter
*/
}
私の基準API:
ProjectionList projections = Projections.projectionList();
projections.add(Projections.property("this.personID"), "personID");
projections.add(Projections.property("this.wife"), "wife");
projections.add(Projections.property("this.wife.name"), "wife.name");
Criteria criteria = null;
criteria = getHandlerSession().createCriteria(Person.class);
criteria.createCriteria("wife", "wife", JoinType.LEFT.ordinal());
criterion = Restrictions.eq("wife.age", 19);
criteria.add(criterion);
criteria.setProjection(projections);
criteria.setResultTransformer(Transformers.aliasToBean(Person.class));
return criteria.list();
そして、妻のプロパティの指定された基準と指定された戻り値の結果セットを使用して、Person を照会できることを願っています。だから私は指定された戻り結果セットを取得するためにプロジェクションを使用しました
personIDが欲しい、名前(人)、名前(妻)が返ってくる。どのように API を使用する必要があるか、私は Hibernate Criteria API を使用することを好みます。
今回は、上記のコードを使用して期待どおりの結果を取得しましたが、例外がスローされ、エラー メッセージ :
が返され、年齢値が 19 の妻を持つ人を取得するのに正しいException in thread "main" org.hibernate.QueryException: could not resolve property: wife.name of: maladzan.model.Person
かどうか?Restrictions.eq("wife.age", 19);
ありがとう