4

奇妙なことに、これについて簡単なことを見つけることができません。2つのエンティティがあり、一方が他方の中にあります。私の質問は、サブエンティティからプロパティにアクセスするにはどうすればよいですか?

エンティティ1

@Getter
@Setter
@Entity
public class ObjectA{
    String name;
    String surname;
    ObjectB B;
}

エンティティ2

@Setter
@Getter
@Entity
ObjectB{
    String family;
    String range;
}

私が欲しいのは、基準検索で家族と範囲にアクセスすることです、それで私はこれを作りました:

public List<ObjectA> search(String name, String surname, String family, String range) {
    Criteria c = HibernateUtil.getSessionFactory().getCurrentSession().createCriteria(ObjectA.class, "a");

if (!name.equals("")) {
    c.add(Restrictions.eq("a.name", name));
}
if (!surname.equals("")) {
    c.add(Restrictions.eq("a.surname", surname));
}
if (!family.equals("")) {
    c.add(Restrictions.eq("a.B.family", family));
}
if (!range.equals("")) {
    c.add(Restrictions.eq("a.B.range", range));
}
return c.list();

}

名前と名前にはアクセスできますが、家族と範囲にはアクセスできません。「プロパティを解決できませんでした」どうすればよいですか?

ありがとう=D

4

2 に答える 2

5

サブクラスプロパティにアクセスできるようにするには、そのエイリアスを作成する必要があります。

次のマニュアルのセクション15.4をご覧くださいhttp://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html

于 2012-07-03T13:20:08.317 に答える
2

あなたの場合、エイリアスが必要かどうかはわかりません。サブエンティティをリクエストするには、サブエンティティに条件を作成してから、そのサブエンティティにパラメータを追加する必要があります。

public List<ObjectA> search(String name, String surname, String family, String range) {
    Criteria aCriteria = HibernateUtil.getSessionFactory().getCurrentSession().createCriteria(ObjectA.class);

if (!name.equals("")) {
    aCriteria.add(Restrictions.eq("name", name));
}
if (!surname.equals("")) {
    aCriteria.add(Restrictions.eq("surname", surname));
}

Criteria bCriteria = aCriteria.createCriteria("B");

if (!family.equals("")) {
    bCriteria.add(Restrictions.eq("family", family));
}
if (!range.equals("")) {
    bCriteria.add(Restrictions.eq("range", range));
}
return aCriteria.list();

注意:は、 B以外のオブジェクトaCriteria.createCriteria("B")のみが返されるようにするため、空でない場合にのみ副基準を作成することをお勧めします。ObjectAnullfamilyrange

于 2012-07-03T13:34:09.643 に答える