如何使用Hibernate插入新项目?

时间:2014-03-18 06:55:17

标签: java mysql hibernate

我有一个名为Task的实体类,它在hibernate中映射。

我能够正确地获取属于此课程的现有项目,因此我不认为这是该课程映射的问题。

但是,当我尝试插入新项目时,出现以下错误:

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$1.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(),那么新任务就不会插入到数据库中。

我做错了什么?

修改:session.save(task)无法正常工作

3 个答案:

答案 0 :(得分:28)

借助此链接获得此功能:http://www.coderanch.com/t/487173/ORM/databases/hibernate-sequence-exist

显然,hibernate会查找用于生成id的序列表。设置以下内容:

@GeneratedValue(strategy = GenerationType.IDENTITY)

在id上,使它使用底层db的自动增量而不是尝试生成id本身,现在它可以正常工作。

答案 1 :(得分:0)

如果其他人正在努力解决此错误,我通过删除

来修复它
<prop key="hibernate.id.new_generator_mappings">true</prop>

来自hibernate属性。

答案 2 :(得分:0)

我不小心删除了我的db中的hibernate_sequence表。 变化:

spring.jpa.hibernate.ddl-auto=none

spring.jpa.hibernate.ddl-auto=create

在您的application.properties文件中 所以Hibernate可以自己重新创建这个表