1

Мой код выглядит следующим образом:Play Framework Ebean два ManyToMany отношения возвращают те же данные

@Entity 
public class Document extends Model 
{ 
    @Id 
    private Long id; 

    @ManyToMany(cascade = CascadeType.ALL) 
    @JoinTable(name = "developers") 
    private Set<Tester> developers = new HashSet<>(); 

    @ManyToMany(cascade = CascadeType.ALL) 
    @JoinTable(name = "testers") 
    private Set<Tester> testers = new HashSet<>(); 
} 

Я использую JoinTable аннотацию в противном случае я в конечном итоге с тем же присоединиться к столу для многих ко многим отношений. Это хорошо работает, и я получаю две таблицы (разработчики и тестеры).

Я даже могу правильно сохранить данные. Настройка разработчиков и/или тестеров, а затем сохранение документа документа работает правильно.

Теперь проблема заключается в том, что в тот момент я сделать что-то вроде:

Document.find.all() получить доступные документы, разработчики и тестеры поля возвращают те же данные, несмотря на данные отличаться от других в базе данных. Выполнение document.getDevelopers() и document.getTesters() возвращает те же данные с getDevelopers() всегда скрываетgetTesters() данные.

Является ли это некоторой ошибкой/ограничением в EMS ORM?

Я использую Play 2.3.8

+0

Это ошибка в EBean. Вы также можете посмотреть [этот пост] (http://stackoverflow.com/questions/24099008/ebean-multiple-manytomany-delivers-strange-behavior) – rtruszk

+0

@rtruszk Я действительно искал что-то подобное, но не нашел его. Спасибо за информацию! – Anton

ответ

1

Явное выборки ИНГ поля возвращает правильные данные.

Просто определить собственный метод найти так:

public static List<Document> findAll() { 
    return Ebean.find(Document.class) 
       .fetch("developers") 
       .fetch("testers") 
     .findList(); 
} 

Тем не менее интересно, если есть лучшие способы ...

0

я найти решение, которое работает для меня не извлекая другие таблицы и без исключений получить. .

Вместо этого сам список объявляет объект, который удерживает список.

@OneToOne(cascade = CascadeType.ALL) 
ForeignStories foreignStories = new ForeignStories(); 

где ForeignStories есть ..

@Entity 
@Table(name="foreign_stories") 
@SuppressWarnings("serial") 
public class ForeignStories extends Model { 
    @Id 
    @NotNull 
    Long id; 

    @ManyToMany(cascade = CascadeType.ALL) 
    List<Story> foreignStories = new ArrayList<Story>(); 
} 
Смежные вопросы