2014-01-08 3 views
0

С 3-х дней я ищу решение моей проблемы. Традиционно у меня есть table и его detail table в mysql. Это делается с помощью JPA play framework 1.2.x. Мне нужно реализовать запрос с целью фильтрации. У меня есть объект модели Event, и у каждого события есть функции. Связь между ними такова, как показано ниже.Запрос JPA для родителей и детей Модель

@Entity(name="event") 
public class Event extends Model{ 
public String name; 
@OneToMany(fetch = FetchType.LAZY, mappedBy = "event", cascade = CascadeType.ALL) 
public List<Features> features; 
} 

@Entity(name ="features") 
public class Features extends Model{ 
public String name; 
@ManyToOne 
public Event event; 
} 

Таким образом, после того, что мне нужно запросить свои данные в соответствии с feature id. Например, если feature_id подходит для 1,2 и 3. мой query должен возвращать только events, который имеет функции с 1,2 и 3 идентификаторами.

мне очень нужна ваша помощь StackOverflow ..

ответ

1
select e from Event e 
where 3 = (select count(f.id) from Feature f where f.id in (1, 2, 3) and f.event = e) 

должен сделать трюк (это предполагает, что данное событие не имеет кратные экземпляров одного и того же признака, хотя).

Чтобы обобщить, скажем idSet ваш набор идентификаторов художественных, то запрос будет, таким образом,

select e from Event e 
where :idCount = (select count(f.id) from Feature f where f.id in :ids and f.event = e) 

и вы бы связать idSet.size() к idCount и idSet к ids.

Запрос также может быть записан в виде следующего, который будет также сделать его работу для ManyToMany ассоциации:

select e from Event e 
where :idCount = (select count(f.id) from Event e2 
        join e2.features f 
        where f.id in :ids 
        and e2 = e) 
+0

Спасибо за ваш ответ. это сработало. Но я не могу реализовать предложение IN в запросе hibernate JPA. Вы знаете, как это сделать? – Emilla

+0

Если два события могут иметь одну и ту же функцию, тогда ваше сопоставление неверно: это должно быть многоточечное, а не однопользовательское. Однако запрос может быть легко адаптирован к этому. –

+0

да. Ты прав. Я обновил свой комментарий :) – Emilla

Смежные вопросы