Hibernate:@GeneratedValue(strategy = GenerationType

时间:2011-10-12 10:33:33

标签: java hibernate exception spring-mvc db2

我正在为我的应用程序使用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来解决这个问题。

4 个答案:

答案 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本身但不这样做。