我正在为我的应用程序使用DB2。我在创建数据库后运行一些插入脚本。该插入脚本在表中生成记录,其中id是在插入脚本中给出的。
假设对于abc表插入脚本创建一个id = 3的记录。由于id被设置为在hibernate中自动生成,所以在从应用程序保存第三条记录时我得到了异常。
Caused by: com.ibm.websphere.ce.cm.DuplicateKeyException: One or
more values in the INSERT statement, UPDATE statement, or foreign
key update caused by a DELETE statement are not valid
because the primary key, unique constraint or unique
index identified by "1" constrains table
我正在使用@GeneratedValue(strategy = GenerationType.AUTO)
我应该用strategy = GenerationType
来解决这个问题。
答案 0 :(得分:1)
使用GenerationType.IDENTITY时,某些数据库和Hibernate存在问题。尝试使用序列并显式配置它的所有内容:
@Id
@SequenceGenerator(name = "DEPARTMENT_ID_GENERATOR", sequenceName="department_sequence", allocationSize=100)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "DEPARTMENT_ID_GENERATOR")
@Column(unique = true, nullable = false)
protected Long id;
答案 1 :(得分:0)
对于DB2 @GeneratedValue(strategy = GenerationType.IDENTITY)
应该正常工作。
答案 2 :(得分:0)
如果在文件中提供了ID,那么您根本不需要@GeneratedValue
,因为没有要生成的ID。并确保按@SjB建议清理数据库。
此外,在不太了解DB2的情况下,错误消息表明可能存在其他违规,而不仅仅是插入时的重复ID。是否涉及外键?
答案 3 :(得分:0)
除了这个查询,没有任何作用。
alter table TABLE_NAME alter column ID set GENERATED BY DEFAULT RESTART WITH 10000;
DB2应该选择可用的ID本身但不这样做。