Java Hibernate试图在spring中删除外键行

Java Hibernate试图在spring中删除外键行,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我试图使用spring hibernate/jpa中的CRUDepository删除操作从数据库中删除实体。该实体(用户)与其他实体(组织)有@OnetoMany关系。删除用户时,它还会尝试删除组织表中外键对应的行,此时会抛出错误 我不想删除组织表中的行,只想删除用户userRepository.delete(createdUser)。有人能告诉我为什么这不能像预期的那样起作用吗 User.java /** * The user's organisation */ @NotNull @Ser

我试图使用spring hibernate/jpa中的CRUDepository删除操作从数据库中删除实体。该实体(用户)与其他实体(组织)有
@OnetoMany
关系。删除用户时,它还会尝试删除组织表中外键对应的行,此时会抛出错误

我不想删除组织表中的行,只想删除用户
userRepository.delete(createdUser)。有人能告诉我为什么这不能像预期的那样起作用吗

User.java

/**
 * The user's organisation
 */
@NotNull
@SerializedName("organisation")
@Expose
@ManyToOne
@JoinColumn(name = "organisation_id")
private Organisation organisation;
/**
 * The organisation's domain name
 */
@NotNull
private String domainName;

@OneToMany(mappedBy = "organisation")
private Set<User> users;
organization.java

/**
 * The user's organisation
 */
@NotNull
@SerializedName("organisation")
@Expose
@ManyToOne
@JoinColumn(name = "organisation_id")
private Organisation organisation;
/**
 * The organisation's domain name
 */
@NotNull
private String domainName;

@OneToMany(mappedBy = "organisation")
private Set<User> users;

好吧,我本来希望测试能够正常工作,因为您使用的是
外键
。当我尝试使用HSQLDB时,我工作过,HSQLDB也有限制,所以我不确定那里发生了什么。直接与
组织
POJO一起尝试。从中删除
用户
,然后重新保存
组织

Organization o =organizationRepository.findAll().iterator().next();
o.getUsers().remove(0);
organizationRepository.save(o);

编辑:在您进行测试之前,可能您的设置中有一些手动SQL插入失败。

好吧,我本来希望测试能够工作,因为您使用的是
外键。当我尝试使用HSQLDB时,我工作过,HSQLDB也有限制,所以我不确定那里发生了什么。直接与
组织
POJO一起尝试。从中删除
用户
,然后重新保存
组织

Organization o =organizationRepository.findAll().iterator().next();
o.getUsers().remove(0);
organizationRepository.save(o);

编辑:在进行测试之前,您的设置中可能有一些手动SQL插入失败。

异常是一个DBUnit异常,由安装方法引发。它不是由您的测试方法引发的。但它是由以下原因引起的:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:无法添加或更新子行:外键约束失败(
watchmaker_db
user
,constraint
FK_t2c7mdeyen6pg5d1hpwyw6ox4e
外键(
organization\u id
)参考文件
organization
id
)我不认为异常是由您描述的问题引起的。为什么不在hibernate配置中激活SQL日志记录,并查看hibernate在测试中有效地执行了哪些SQL语句?由DBUnit.beforeTestMethod引起…因此它在设置中,而不是在测试中。堆栈跟踪无法更清楚,所以请查看日志SQL是什么问题由setup()引发。异常是一个DBUnit异常,从安装方法引发。它不是由测试方法引发的。但它是由以下原因引起的:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:无法添加或更新子行:外键约束失败(
watchmaker\u db
user
,CONSTRAINT
FK\u t2c7mdayen6pg5d1hpwyw6ox4e
外键(
organization\u id
)参考
organization
)我不认为异常是由您描述的问题引起的。为什么不在hibernate配置中激活SQL日志记录,并查看hibernate在测试中有效地执行了哪些SQL语句?由DBUnit.beforeTestMethod引起…因此它在设置中,而不是在测试中。堆栈跟踪无法更清楚,所以请查看日志SQL是什么问题被你的设置所破坏()。此解决方案很好,但当您再次添加组织时,它会将组织添加到表的末尾,这将中断序列。在这种情况下该怎么办?此解决方案很好,但当您再次添加组织时,它会将组织添加到表的末尾,这将中断序列。在这种情况下该怎么办?