【问题标题】:How to insert new items with Hibernate?如何使用 Hibernate 插入新项目?
【发布时间】:2014-04-23 17:11:37
【问题描述】:

我有一个名为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) 也不起作用

【问题讨论】:

  • @Youngistan 我看不到插入或更新 sql,它在抛出异常之前显示的最后一个查询是:Hibernate: select next_val as id_val from hibernate_sequence for update
  • 你可以试试 session.save(t);
  • @Youngistan 刚试过,还是一样的错误
  • 谁能确认public long id = 0; id 是否被允许?
  • @SubirKumarSao 我已将其更改为 public long id,但它没有任何效果。

标签: java mysql hibernate


【解决方案1】:

在此链接的帮助下使其工作:http://www.coderanch.com/t/487173/ORM/databases/hibernate-sequence-exist

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

@GeneratedValue(strategy = GenerationType.IDENTITY)

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

【讨论】:

    【解决方案2】:

    如果其他人正在为这个错误而苦苦挣扎,我通过删除来修复它

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

    来自休眠属性。

    【讨论】:

      【解决方案3】:

      我不小心删除了我的数据库中的 hibernate_sequence 表。 变化:

      spring.jpa.hibernate.ddl-auto=none
      

      spring.jpa.hibernate.ddl-auto=create
      

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      相关资源
      最近更新 更多