我有一个名为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(),则新任务不会插入到数据库中。
我做错了什么?
编辑:<代码>会话。保存(任务)也不起作用
如果其他人正在努力解决此错误,我通过删除
<prop key="hibernate.id.new_generator_mappings">true</prop>
从Hibernate属性。
我不小心删除了数据库中hibernate_sequence表。更改:
spring.jpa.hibernate.ddl-auto=none
到
spring.jpa.hibernate.ddl-auto=create
在你的application.properties文件里这样Hibernate就可以自己重建这张桌子了
通过此链接的帮助实现此功能:http://www.coderanch.com/t/487173/ORM/databases/hibernate-sequence-exist
显然,hibernate会查找用于生成id的序列表。设置如下:
@GeneratedValue(strategy = GenerationType.IDENTITY)
在id上,使其使用底层db的自动增量,而不是尝试生成id本身,现在它可以工作了。
问题内容: 我有一个称为hibernate的实体类。 我能够正确地获取属于该类的现有项目,因此我认为这与类的映射无关。 但是,当我尝试插入新项目时,出现以下错误: 在下面的代码中: 如果我不这样做,那么新任务就不会插入数据库中。 我究竟做错了什么? 编辑:也不起作用 问题答案: 在此链接的帮助下可以使用此工具:http : //www.coderanch.com/t/487173/ORM/data
问题内容: 我需要从每日CSV文件中消耗大量数据。CSV包含约12万条记录。使用hibernate模式时,这会减慢爬行速度。基本上,当使用saveOrUpdate()时,hibernate似乎在每个单独的INSERT(或UPDATE)之前执行SELECT。对于使用saveOrUpdate()持久存储的每个实例,在实际的INSERT或UPDATE之前发出SELECT。我能理解为什么要这样做,但是在进
我想在交叉表中插入大量的实体。为此,我想启用Hibernate的批处理插入选项,这样每次插入将不是添加1行,而是一次添加20或50行。 我正在尝试重现Hibernate教程的结果。我创建了一个测试函数,它将尝试插入30个客户,就像在示例中一样: Customer类没有生成的ID。 在收到Vlad Mihalcea的回答后,我意识到是的,事实上批处理语句是有效的,至少在hibernate和jdbc级
问题内容: 我想在Hibernate中获取最后插入的值的ID。 搜索后: 但是以下代码给了我这个错误: java.lang.ClassCastException:无法将java.math.BigInteger强制转换为java.lang.Long 请分享您的想法! 解 不要忘记导入: 导入java.math.BigInteger; 问题答案: 错误很明显。它回来了而不是 您必须将其分配给。从中得到
问题内容: 我正在循环列表并将其插入数据库中,但它得到的更新记录一个接一个。最后我只在列表中的数据库最后一条记录中看到。 输入名称:Linux,Windows,Mac hibernate.cfg.xml: 这里有3次获得循环并插入数据库。但是以某种方式覆盖了这些值。因为我看到sql插入和更新在控制台中运行。 请帮助我将多个行插入数据库。 问题答案: Hibernate文档中有一章非常好的关于批处理
我想在Hibernate中获取最后一个插入值的id。 搜索后: 但是下面的代码给我这个错误: JAVAClassCastException:java。数学无法将BigInteger转换为java。朗·朗 请分享你的想法! 解决方案 不要忘记导入: 导入java.math.大整数;