【发布时间】:2020-11-11 08:06:41
【问题描述】:
我在实体上有一个简单的单向多对一关系,不幸的是,它是在我无法更改的架构中定义的。
定义如下
@Entity
@Table(name="Profile")
...
public class Profile{
@ManyToOne
@JoinColumn(name="usr_id", nullable=false, updatable=false)
private User usr;
...
一切都很好。该关系通过数据库中的外键强制执行,因此 nullable = false 和 updatable = false。没有提到用户中的配置文件。 当我尝试删除 Profile 时,hibernate 也会尝试删除 User 实体,该实体是其他关系的父级,因此失败。我在任何地方都没有 CascadeType 注释。
我的意图是在 usr 字段中对使用此配置文件的用户进行简单引用。这是一个单向的关系。每当我删除配置文件时,用户实体都不应受到影响。 当 usr 字段可能在删除之前被取消引用时,这似乎是可以实现的(我可以在休眠生成的 sql 中看到休眠尝试在删除之前将该字段设置为 null) - 但是由于外键而失败。
我想做的事情可以实现吗?如果有,怎么做?
(如果相关的话,我在 hibernate 之上使用 spring 数据。)
进一步信息:我尝试了 optional=false,它导致删除父实体行为。我已经尝试了 CascadeTypes、@OnDelete 和 NO_ACTION 的所有合适组合(仍然尝试删除用户)并定义了一个反向但由用户关系拥有的 - 到目前为止没有成功。最重要的是,我尝试了搜索功能;),这使我得出结论,这只是我的问题。如果我错过了一个已回答的问题,我将不胜感激指向正确方向的指针。谢谢。
【问题讨论】: