我想@OneToOne
使用 ID 创建单向关系。让我们考虑以下示例:
@Table(name = "user")
@Entity
class User (
@Id
@GeneratedValue(...)
var id: Long? = null,
@OneToOne
var address: UserAddress? = null
)
@Table(name = "user_address")
@Entity
class UserAddress(
@Id
var id: Long? = null,
(...)
)
user_address.id
在数据库上,引用有外键约束user.id
。我尝试使用许多不同的注释组合,但我仍然遇到删除问题。我正在使用用户的 JpaRepository,当userRepository.deleteById(id)
被调用时,只有子 ( address
) 被删除,而不是父 ( user
)。我真的很想保留@Id
名称为“id”的列。甚至可能吗?
编辑
当我使用以下代码时:
@Table(name = "user")
@Entity
class User (
@Id
@GeneratedValue(...)
var id: Long? = null,
@OneToOne(cascade = [CascadeType.All])
@JoinColumn(name = "id", referencedColumnName = "id")
var address: UserAddress? = null
)
@Table(name = "user_address")
@Entity
class UserAddress(
@Id
var id: Long? = null,
@OneToOne(mappedBy = "address")
var user: User? = null
(...)
)
当userRepository.deleteById(id)
被调用时,只有孩子被删除。我不知道为什么......此外,我想保持这种关系是单向的。
编辑用户存储库
@Repository
interface UserRepository : JpaRepository<User, Long> {
}
编辑 - 解决
了。我有另一个实体(我们称之为公司),它有Set<User>
. 事实证明,让它获取。EAGER 防止用户被删除...感谢大家的宝贵时间。我不知道这可能是一个问题,所以我没有提到它......