Как вставить новые элементы в Hibernate?

у меня есть класс сущностей называется Task который отображается в спящем режиме.

Я могу правильно выбрать существующие элементы, принадлежащие этому классу, поэтому я не думаю, что это проблема с отображением класса.

однако, когда я пытаюсь вставить новый элемент, я получаю следующую ошибку:

org.hibernate.exception.SQLGrammarException: error performing isolated work
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:80)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
    at org.hibernate.engine.transaction.internal.jdbc.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:96)
    at org.hibernate.id.enhanced.TableStructure.getNextValue(TableStructure.java:131)
    at org.hibernate.id.enhanced.NoopOptimizer.generate(NoopOptimizer.java:58)
    at org.hibernate.id.enhanced.SequenceStyleGenerator.generate(SequenceStyleGenerator.java:422)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:117)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
    at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:680)
    at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:672)

в следующем коде:

Task t = new Task();
t.title = "foo";
t.comment = "bar";
//snip... (every single field of task is given some value, except for id)

session.saveOrUpdate("Task", t); //This is the line on which the exception occurs

если я не делаю saveOrUpdate(), тогда новая задача не вставляется в БД.

что я делаю не так?

Edit:session.save(task) не работает

3 ответов


получил это для работы с помощью этой ссылки:http://www.coderanch.com/t/487173/ORM/databases/hibernate-sequence-exist

по-видимому, hibernate ищет таблицы последовательности для генерации идентификатора. Установка следующего:

@GeneratedValue(strategy = GenerationType.IDENTITY)

на идентификаторе заставляет его использовать автоматическое приращение базовой БД и не пытаться генерировать сам идентификатор, и теперь он работает.


Если кто-то еще борется с этой ошибкой, я исправил ее, удалив

<prop key="hibernate.id.new_generator_mappings">true</prop>

из свойств hibernate.


я случайно удалил таблицу hibernate_sequence в моей БД. Изменить:

spring.jpa.hibernate.ddl-auto=none

to

spring.jpa.hibernate.ddl-auto=create

в вашем приложении.файл свойств таким образом, Hibernate мог воссоздать эту таблицу сам