2014-06-10 4 views
0

임 다음 쿼리를 CriteriaBuilder 사용하여 구축을 위해 노력 목록에 중첩 부동산 찾기 :최대 절전 모드 기준 :

작업이 자산을 가지고 있으며, 자산이 사용자의 목록을 가지고
SELECT * FROM job j, asset a, asset_users au 
    where j.JOB_ID = a.ASSET_ID and a.ASSET_ID = au.ASSET_ID and au.USER_ID = 6 

... 난 그냥 반환 할 criteri 해당 복제 할

Session session = this.sessionFactory.getCurrentSession(); 
Criteria criteria = session.createCriteria(Company.class); 
criterion = Restrictions.eq("companyRoles.name", "ADMIN"); 
criteria.add(criterion); 
List<Company> companyList = criteria.list(); 

을 시도 : 특정 사용자를 포함하는 자산을 가지고 작업의 목록 ...

나는 어떤 사람이 그런 식으로 그 일을 보았다 abuilder하지만 운이 없어. 내가 얻는 것은 객체 목록 (userList) 내에서 내 사용자 ID를 찾을 수 없다는 것입니다. (job) .asset.userList.id와 같은 객체에 액세스해야하기 때문에 예제가 더 어려워진다. BTW,뿐만 아니라이 시도 :

CriteriaBuilder cb = em.getCriteriaBuilder(); 
CriteriaQuery<Job> cq = cb.createQuery(Job.class); 
Root<Job> jobRoot = cq.from(Job.class); 
Join<Job, User> assetJoin = jobRoot.join("asset.userList"); 
cq.where(assetJoin.get("id").in(id)); 

이 같은 문제를 가지고 ... 경로를 찾을 수 없습니다.

어떤 도움을 주셔서 감사합니다. 감사합니다.

답변

1

나는 단계가 빠져 있다고 생각합니다. 당신은 다음 수준의 가입이 필요합니다.

CriteriaBuilder cb = em.getCriteriaBuilder(); 
CriteriaQuery<Job> cq = cb.createQuery(Job.class); 
Root<Job> jobRoot = cq.from(Job.class); 

// join the asset 
Join<Job, Asset> assetJoin = jobRoot.join("asset"); 

// join the list of users 
Join<Asset, User> assetUserJoin = assetJoin.join("userList"); 

cq.where(assetUserJoin.get("id").in(id)); 

assetUsrJoin.get("id")의 유형은 Path<Long> 또는 유사한 무언가이다. JPA Criteria API

+0

OMG 당신은 최고입니다 ... 정말 울었습니다 ... 마치 ... 로켓처럼 ... 작동했습니다. 많은 것을 가르쳐 줬습니다! 고마워요! –