我有一个hibernate实体,其ID配置为
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
在第一次运行中,可以正常创建新元素。但是,如果我重新启动应用程序并取回记录,则下次我尝试保留该实体时,hibernate将尝试使用未重新启动应用程序时生成的相同ID。
我收到以下错误,并且在使用trace选项运行时,我能够看到ID被重用了
hibernate状态:将值(?,?,?)插入到org_myEntity(entitiyJID,entitityName,id)中org.hibernate.util.JDBCExceptionReporter
SQL错误:20000,SQLState:23505
org.hibernate.util.JDBCExceptionReporter该语句已中止,因为它将已在“ TABLE_NAME”上定义的“
SQL120725164357680”标识的唯一或主键约束或唯一索引中导致键值重复。org.hibernate.event.def.AbstractFlushingEventListener
无法与会话org.hibernate.exception.ConstraintViolationException同步数据库状态:不能
顺便说一下,我正在使用hibernate3.3.2.GA,javax.persistance 2.0.0和Derby 10.5.1数据库
有人知道我这一代可能出什么毛病吗,我该如何解决?
如果使用AUTO,则Hibernate将选择一种策略来生成您的ID。从参考:
AUTO-标识列,序列或表,具体取决于基础数据库。
因此,您必须查看生成的ID,才能查看Derby使用的策略。虽然看起来很像,但每次您重新启动应用程序时,它都会重置生成器。尝试设定
<prop key="hibernate.hbm2ddl.auto">update</prop>
您可以使用序列生成器快速修复它。喜欢:
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="my_seq_gen")
@SequenceGenerator(name="my_seq_gen", sequenceName="ENTITY_SEQ")
private Long id;
其中ENTITY_SEQ是数据库中序列的名称(您手动创建一个)。
例如,如果我希望生成的ID开始为100,XXX而不是10,XXX并增加100,我将如何进行更改? 请帮个忙。提前谢了。
问题内容: 我是新来的hibernate。我不了解以下两种主要的密钥生成策略: 身分识别 序列 有人可以解释这两个是如何工作的,两者之间有什么区别? 问题答案: 引用Java持久性/标识和排序: 身份 排序使用数据库中的 特殊IDENTITY列 来允许数据库在插入对象的行时自动为其分配ID。许多数据库(例如 MySQL,DB2,SQL Server,Sybase和Postgres) 都支持标识列。
问题内容: 我正在尝试将对象持久化到数据库。不断获取“列ID无法接受空值错误”。我的对象看起来像这样: 我的持久功能: 问题答案: 您可以使用GenerationType.TABLE。这样,jpa将序列表用于ID分配,您可能永远不需要生成序列或自动递增值或触发可移植性的触发器。 另请注意,在java中,int类型默认使用0初始化,因此您也可以摆脱它。
问题内容: 我使用在我的实体上生成ID。 我现在不知道它是如何工作的,但是在我的子表上,它会生成遵循父序列的ID值。 在父级上插入的ID值将更新序列。在子级上插入的ID值将更新序列。在下一个父项插入中,序列…使用由子项插入更新的值… 此注释不会创建两个序列,而只会创建一个。这是正确/预期的吗? 我仅使用插入了具有DAO服务的实体 ; 问题答案: 这些注释不会创建两个序列,而只会创建一个。这是正确/
问题内容: 我想创建带有通知消息的广播AlarmManager(重复)。我从Pickers中传递日历对象。如果我不重启设备,它将正常工作。但是,当我重新启动设备时,您知道我的calander对象将为null。重新启动后如何管理重复警报以及如何保留日历时间表?感谢您的想法。 问题答案: 您需要使用并将其设置为响应消息。例如 在清单中注册您的 在代码中处理消息 MyBootReceiver.java
我用Inno Setup做了一个安装程序,在一些文件运行后我需要重启电脑,所以我用了这篇文章中的解决方案。 inno安装示例“CodePrepareToInstall”。iss运行良好,所以我使用了代码进行测试安装,但计算机重新启动后安装程序无法启动。 两个安装程序(inno demo和我的测试)都在“HKLM\Software\Microsoft\Windows\CurrentVersion\R