Я только начал с Play Framework и столкнулся с некоторыми проблемами при использовании коллекции в одном из моих классов моделей.Я очень новичок в Play и JPA / Hibernate, поэтому, пожалуйста, извините меня за noobness ... Я пытался искать в Интернете ответы, но не мог найти то, что я искал.
По сути, у меня есть2 модели:
@Entity
public class Song extends Model
{
@Column(unique = true)
public int songId;
public String name;
public String artist;
public Song() {}
public Song(int songId, String name, String artist)
{
this.songId = songId;
this.name = name;
this.artist = artist;
}
}
@Entity
public class CurrentSongList extends Model {
@OneToMany(orphanRemoval=false)
public List<Song> currentSongList;
}
Я хочу, чтобы здесь были все песни в базе данных, а затем список для временного хранения подмножества этих песен (содержимое списка со временем изменится) ... еслисписок удален, я не хочу, чтобы песни были удалены (песни не должны содержать ссылки на список).Все, что я тогда пытаюсь сделать при запуске приложения, это загрузить песни из файла данных и вставить подмножество песен в список и сохранить список с кодом ниже .... Вот где у меня были бесконечные проблемы.
Fixtures.deleteDatabase();
Fixtures.loadModels("songlist.yaml");
List<Song> songs = Song.findAll();
CurrentSongList.deleteAll();
CurrentSongList currentSongs = new CurrentSongList();
currentSongs.currentSongList = new ArrayList<Song>();
currentSongs.currentSongList.add(songs.get(0));
currentSongs.currentSongList.add(songs.get(1));
EntityManager em = JPA.em();
em.persist(currentSongs);
em.flush();
Если я пропущу вызов сброса, список не будет сохранен при извлечении его содержимого из БД в дальнейшем.Однако вызов flush приводит к следующему исключению:
Caused by: org.hibernate.HibernateException: Found two representations of same collection: models.CurrentSongList.currentSongList
at org.hibernate.engine.Collections.processReachableCollection(Collections.java:175)
at org.hibernate.event.def.FlushVisitor.processCollection(FlushVisitor.java:60)
at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:122)
at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:83)
at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:77)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:165)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:240)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:76)
Я понимаю, что, возможно, я делаю здесь что-то глупое (действительно ли flush () после persist действительно необходимо?) И не понимаю, как работает этот материалкак бы то ни было, но я изо всех сил пытался найти информацию по этой проблеме.Буду очень признателен за любую помощь в достижении вышеизложенного.
Спасибо!