2013-08-09 3 views
2

У меня есть следующие две модели в моем проекте:Play Framework ManyToMany Ассоциация Access

@Entity 
public class Reports extends Model{ 
    @Id 
    @GeneratedValue 
    public int id; 
    @ManyToMany(cascade = CascadeType.ALL) 
    public List<Tags> tags; 

и

@Entity 
public class Tags extends Model{ 
    @Id 
    public String name; 
    @ManyToMany(cascade = CascadeType.ALL) 
    public Reports reports; 

Поскольку эти две сущности имеют @ManyToMany ассоциации, играть! автоматически создает таблицу в моей базе данных PostgreSQL:

create table reports_tags (
    reports_id      integer not null, 
    tags_name      varchar(255) not null, 
    constraint pk_reports_tags primary key (reports_id, tags_name)) 
; 

А вот пример данных, что reports_tags должен выглядеть следующим образом:

reports_id  tags_name 
    1   pie 
    1   bar 
    1   line 
    3   plot 
    3   bar 
    4   scattered 
    4   plot 

Что у меня проблема в том, что я хочу find all reports where tags_name = 'bar'

Так с этим "запроса" вызов, я должен вернуться reports с id 1 и 3.

Используя обычный способ

Ebean.find(Reports.class) 
    .where() 
    .eq("tags_name", "bar") 
    .findList() 

не будет работать, потому что нет таких полей с tags_name в Reports модели/таблицы

Я не знаю, что код, чтобы сделать этот вызов запроса т.к. мой опыт работы с Ebean очень мало.

+0

вы должны пометить его с языком, который вы используете игру –

+0

я извиняюсь за это. Я просто отметил его. Использование Java. – cYn

+0

Не нужно извиняться! Это просто поможет в формате кода и немного побольше, если возможно, для вашего вопроса. –

ответ

4

Я никогда не работал с этой игрой! но, насколько я понимаю, часть его содержит реализацию JPA. В JPA при запросе что-то вам следует обратиться к имени поля Java объекта, а не столбец в самой таблице, то есть ваш запрос должен быть чем-то вроде

Ebean.find(Reports.class) 
.where() 
.eq("tags.name", "bar") 
.findList() 

Вы можете обратиться к примерам в начале Javadoc here

Надежда, что помогает

+0

WOW !!!! Вот и все! Это точно так же, как вы сказали. Я потратил так много времени на это мышление моей базы данных, возможно, потребуется перестановка. Человек это сосет, не зная синтаксиса! Еще раз спасибо. – cYn