2015-01-11 2 views
0

У меня есть структура юридических лиц для ведения строительных, комнаты и полы, как это:OpenJPA присоединиться запрос не возвращает никаких данных

Строительство - один ко многим - Пол - один ко многим номер

I» я смотрю на API критериев, и моя цель - собрать все комнаты, сначала связанные с тем же полом, и найти все комнаты, связанные с одним зданием.

Что касается первой задачи, мне удалось с помощью следующего кода:

CriteriaQuery<TRoom> criteria = em.getCriteriaBuilder().createQuery(TRoom.class); 
Root<TRoom> troom = criteria.from(TRoom.class); 
Predicate condition = em.getCriteriaBuilder().equal(troom.get("tfloor"), em.find(TFloor.class, targetRoom.getFloor().getId())); 
List<TRoom> trooms = em.createQuery(criteria.where(condition)).getResultList(); 

Я попытался использовать то же самое с другой путь (например, «troom.get (» tfloor.tbuilding «)» или troom. . .get ("tfloor") получить ("tbuilding")) и присоединиться к так:

Join<TRoom, TFloor> join = troom.join("tfloor"); 
Predicate condition = em.getCriteriaBuilder().equal(join.get("tbuilding") , em.find(TFloor.class, targetRoom.getFloor().getBuilding().getBuildingId())); 

Но без толку тоже. Я получаю пустой список или исключения.

Каков правильный способ получить все помещения для строительства?

ответ

0

по правому краю код является:

CriteriaQuery<TRoom> criteria = em.getCriteriaBuilder().createQuery(TRoom.class); 
Root<TRoom> troom = criteria.from(TRoom.class); 
Predicate condition = em.getCriteriaBuilder().equal(troom.join("tfloor").get("tbuilding"), targetBuilding); 
Смежные вопросы