使用TableGenerator时重复的ID

时间:2014-01-22 20:18:02

标签: mysql hibernate jpa

尝试在表中保存新行时,我收到重复的ID错误,并且无法保留数据。它在我们的舞台环境中,所以我目前无法访问日志,但我正试图暂时获取它以便弄明白这一点。到目前为止,我只有基本的错误消息:

Duplicate entry '2219193' for key 'PRIMARY'

我们使用序列表,我使用TableGenerator注释如下:

@Entity
@TableGenerator(name="AUDITTRAIL_GEN", table="sequence", pkColumnName = "sequence_name",
        valueColumnName = "sequence_value", pkColumnValue="seq_audittrailid", allocationSize=50)
public class FtpAuditTrail {
    ...
}

我没有为hibernate启用任何特殊设置。从字面上看,我设置的唯一属性是用户名,密码,驱动程序和存储库URL。

还有另一台服务器(与我的应用程序不同)定期更新同一数据库并在表中添加行。

我正在使用Java 1.6.0_65,MySQL 5.5.11和最新版本的hibernate,截至本文写作,4.2.2.Final。

已编辑:我已与其他应用程序的所有者确认他们将序列表更新为新值,然后将新值用作共享表中新行的ID。 TableGenerator是否假设表中的值可以使用?

1 个答案:

答案 0 :(得分:0)

在共享表中创建条目的其他(以及之前已经很久建立的)应用程序期望序列表中保存的值是最后使用的值。所以我需要一个自定义id生成器来做同样的事情。除非hibernate有一个id生成器,它可以满足我的需求。但是这里的答案(https://stackoverflow.com/a/10648572/187423)表明你必须在自己的自定义类中扩展TableGenerator才能实现这一点。