2013-05-15 2 views
0

을에서 hibenate 기준을 사용하여 참여하지만 난 빈 목록을 얻고있다달성하는 방법을 동등 난이 방법을 시도</p> <pre><code>select u.userID, ur.authority from users u, user_roles ur where u.userID = ur.userID and u.userName ="sandy" </code></pre> <p>, 최대 절전 모드에서이 쿼리에 대한 기준을 작성하는 방법을 hbm.xml 파일

DetachedCriteria ownerCriteria = DetachedCriteria.forClass(users.class); 
ownerCriteria.setProjection(Property.forName("userID")); 
ownerCriteria.add(Restrictions.eq("userName", "sandy")); 

Criteria criteria = session.createCriteria(user_roles.class); 
criteria.add(Property.forName("userID").in(ownerCriteria)); 
System.out.println(criteria.list()); 

이 문제에 도움을 줄 수있는 사람이 있습니까?

답변

0

u.userID = ur.userID가 쿼리에있는 것을 볼 수 있습니다. 사용자와 user_roles 사이에 일대 다 관계가 있다는 것을 알 수 있습니까?

Criteria criteria = session.createCriteria(user_roles.class,"ur") 
    .createCriteria("userDto","u") 
    .add(Restrictions.eq("userName", "sandy")); 

그런 다음 쿼리처럼 투사를 추가 : 등록을 마친 경우

, 당신은 같은 것을 할 수

criteria.setProjection(Projections.projectionList() 
    .add(Projections.property("u.userID").as("userID")) 
    .add(Projections.property("ur.authority").as("authority"))); 

을 그리고 당신이 LKE 결과 목록에서 itarete 수 있습니다 :

01 : 당신의 코드에 대한

for(Object[] item:criteria.list()){ 
    System.out.println((String)item[0]); //User id 
    System.out.println((String)item[1]); //Authority 
} 

criteria.add(Property.forName("userID").in(ownerCriteria)); 

속성을 하위 쿼리와 비교하면 생각하는대로 수행되지 않을 수도 있지만 추측에 잘못 될 수 있습니다.