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 中的“注释”。我尝试这样做:

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

我认为它不喜欢代码CriteriaobjectB. 代码中也存在语法错误。

修改

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") 两次

  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 回答