【发布时间】:2021-10-30 22:44:35
【问题描述】:
我有一个User 实体,它在@OneToOne 关系中拥有一个Character 实体。但是,我希望 Character 记录与 User 实体分离后立即删除。
这是我的User.kt实体类:
// User.kt
@Entity
class User(
@Id
var id: String,
var email: String,
@OneToOne(cascade = [CascadeType.ALL], orphanRemoval = true)
var character: Character?,
var isAdmin: Boolean
) { // ... }
这是我为测试这种行为而编写的单元测试:
// UserRepositoryTest.kt
@Test
fun `should remove orphan character entity when being removed from user entity`() {
val user = UserTestTemplate.testUser()
val character = CharacterTestTemplate.testCharacter()
user.character = character
userRepository.save(user)
user.character = null
userRepository.save(user)
val actual = userRepository.findById(user.id).orElse(null)
assertThat(actual).isNotNull()
assertThat(actual.character).isNull()
val savedCharacter = characterRepository.findById(character.id)
assertThat(savedCharacter.get()).isNull() // fails
}
我添加了 CascadeType.ALL 和 orphanRemoval = true 选项,因为这些是我读到的与我的请求相关的唯一内容。
我在单元测试中所做的是创建一个用户和角色实例。然后将角色实例添加到用户并通过UserRepository 保存用户。感谢CascadeType.ALL,角色实例将自动保存。现在,当 从用户中删除角色时,我想反过来做同样的事情。但是,正如您在单元测试的最后一行中看到的那样,这并不像预期的那样工作
【问题讨论】:
-
是双向关系吗?
标签: kotlin spring-data-jpa spring-repositories