我的应用程序中有一个奇怪的Hibernate(3.6.1.Final)行为,此刻我非常绝望。该行为发生在Amazon上的MariaDB 10.1和RDS上。
经过一定程度的成功后(总是大约5k左右),Hibernate会激活:
SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails
从我在stacktrace中看到的内容,Hibernate尝试填充违反FK约束的负值的实体中的外键(FK的目标表没有这样的主键值)。
奇怪的是:
以下是插入过程中违反的实体的FK:
@Entity
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Charge extends Entry {
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "totalId")
private Amount total;
//....
这就是Amount实体中主键的定义方式:
@GeneratedValue
@Id
@Column(nullable = false)
private Integer pk;
//....
我的问题是:
我怀疑是Hibernate以及它如何管理数据库上的auto_increment。关于该主题的帖子很多,但它们都不符合我的具体情况(仅在某次使用后才会发生错误)。
最后注意:在数据库中,auto_increment最初设置为1. Amount实体的所有初始持续(在错误出现之前)都有一个以1开头的增量PK:(1,2,3,...) 。那么为什么经过一段时间后Hibernate会出现负面影响(与FK不兼容)?
非常感谢您的帮助。
最佳-G。
答案 0 :(得分:2)
试试这个:
@Id
@GeneratedValue (strategy = GenerationType.AUTO)
@Column (name = "id")
private long id;
答案 1 :(得分:0)
我们遇到了同样的问题,这是由于旧的mariadb jdbc驱动程序。我们使用的是版本1.4.2 切换到mariadb jdbc驱动程序的1.5.5版后,问题就消失了