У меня проблема с Hibernate.
Мой текущий проект - маленькая игра. В этой игре у вас есть доска , которая имеет множество полей , каждое с жетоном .
Я могу сделать выбор в пустой базе данных без каких-либо проблем, но если я добавлю в нее один объект (сохранение работает без каких-либо исключений, и после этого значения базы данных выглядят хорошо), я получаю исключения.
Интересная часть в классе Board:
@OneToMany(fetch=FetchType.EAGER)
@MapKey(name = "point")
public Map<Point, Field> getGameMatrix() {
return gameMatrix;
}
Мой запрос на получение досок:
return getHibernateTemplate().loadAll(Board.class);
Журнал теперь выглядит так:
Hibernate: выберите this_.id как id0_2_,
this_.uniqueClassName as
uniqueCl3_0_2_, this_.borderDimension
как borderDi4_0_2_, this_.dimension как
измерение0_2_, this_.TYPE как TYPE0_2_,
gamematrix2_.Board_id as Board1_4_,
field3_.id as gameMatrix2_4_, (выберите
точка а11 с поля а11 где
a11.id = gamematrix2_.gameMatrix_id) как
формула0_4_, field3_.id как id1_0_,
field3_.point as point1_0_,
field3_.token_id as token3_1_0_,
token4_.id как id2_1_, token4_.name как
name2_1_, token4_.uniqueClassName as
uniqueCl4_2_1_, token4_.TYPE as
TYPE2_1_ с доски this_ слева снаружи
присоединиться к Board_Field gamematrix2_ на
this_.id = gamematrix2_.Board_id осталось
поле внешнего соединения field3_ on
gamematrix2_.gameMatrix_id = field3_.id
оставил внешнее соединение Token token4_ на
field3_.token_id = token4_.id
Пока все не выглядит хорошо, но Hibernate делает следующее:
Hibernate: delete from Board_Field where Board_id=?
Hibernate: insert into Board_Field (Board_id, gameMatrix_id) values (?, ?)
И я получил это исключение:
Исключение в потоке "AWT-EventQueue-0"
org.springframework.dao.InvalidDataAccessApiUsageException:
объект ссылается на несохраненный переходный процесс
instance - сохранить временный экземпляр
до промывки: поле; вложенными
исключение
org.hibernate.TransientObjectException:
объект ссылается на несохраненный переходный процесс
instance - сохранить временный экземпляр
до промывки: поле
Я не понимаю, почему он делает оператор удаления.
Есть идеи?
спасибо