2013-01-23 1 views
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 + "%")); 
} 

답변

1

나는 코드가 objectB에 대한 Criteria 개체를 생성하는 좋아 생각하지 않습니다. 또한 코드 내에 구문 오류가 있습니다.

개정

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 + "%")); 
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 + "%")); 
} 
+0

내가 두 번째 기준 '주석'이 코멘트가 null가 아닌 경우에만 경우 절에 추가됩니다 얘기를 깜빡 했네요 죄송합니다, 나는 시도하여 솔루션을 업데이트하고 내 코드를 업데이트했지만 작동하지 않았습니다. – wasp256

+0

별칭을 사용해보십시오. http : //docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html#querycriteria-associations –