0

ここにデータベーススキーマがあります:

Table A:                public class A {
id integer,                B objectB;
comment varchar(30),       String comment;         
id_B integer            }

Table B:                public class B {
id integer,                C objectC;
comment varchar(20),       String comment;
network integer         }

Table C:                public class C {
id                         Integer id;
name varchar(30)           String name;
                         }

次に、表Cの適切な「id」と表Bの「comment」をチェックする基準を作成する必要があります。次のことを試みました。

Criteria criteria = getSession().createCriteria(A.class);
criteria.createCriteria("objectB")
        .createCriteria("objectC").add(Restrictions.idEq(networkID));

//gives org.hibernate.QueryException: duplicate association path: objectB error
if (comment != null && comment.length() > 0) {
    criteria.createCriteria("objectB")
            .add(Restrictions.like("comment", "%" + comment + "%"));
}

//second approach gives me no error but does not work, means I receive the wrong results
if (comment != null && comment.length > 0) {
    criteria.add(Restrictions.like("comment", "%" + comment + "%"));
}
4

2 に答える 2

1

Criteriaコードがのオブジェクトを作成するのは好きではないと思いますobjectB。また、コード内に構文エラーがあります。

改訂

Criteria criteria = getSession().createCriteria(A.class);
Criteria criteriaB = criteria.createCriteria("objectB");
Criteria criteriaC = criteriaB.createCriteria("objectC");
criteriaB.add(Restrictions.like("comment", "%" + comment + "%"));
criteriaC.add(Restrictions.idEq(networkID));

構文の問題

Criteria criteria = getSession().createCriteria(A.class);
criteria.createCriteria("objectB")
        .createCriteria("objectC").add(Restrictions.idEq(networkID));

//Syntax error occurs here, missing add
criteria.createCriteria("objectB")
        .(Restrictions.like("comment", "%" + comment + "%"));

//Fix
criteria.createCriteria("objectB").add(Restrictions.like("comment", "%" + comment + "%"));
于 2013-01-23T10:45:41.090 に答える
0

これを試して。createCriteria( "objectB")を2回呼び出す必要はありません

  Criteria criteria = getSession().createCriteria(A.class);
  criteria.createCriteria("objectB").createCriteria("objectC").add(Restrictions.idEq(networkID)).add(Restrictions.like("comment", "%" + comment + "%"));

if (comment != null && comment.length > 0) {
    criteria.createAlias("objectB", "b")
    criteria.add(Restrictions.like("b.comment", "%" + comment + "%"));
}
于 2013-01-23T10:45:49.453 に答える