当前位置: 首页 > 知识库问答 >
问题:

多通单向禁用约束

魏朗
2023-03-14

我有以下单向多通关系:

@Entity
@Table(name = "Child")
public class Child {
    @Id
    private Integer id;

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Parent parent; 
}

@Entity
@Table(name = "parent")
public class Parent{
    @Id
    private Integer id;
}

当我试图从数据库中删除父实体时,我违反了约束。

ORA-02292:违反完整性约束-找到子记录

我需要的是父实体被删除,即使它有子实体,但子实体应该保留。

我如何改变这种关系?

共有3个答案

谷梁向荣
2023-03-14

事实上,这是可以做到的。

@JoinColumn(foreignKey = @ForeignKey(name = "none"))

在描述包含此外键列的表时,将外键指定为缺乏参照完整性约束是合乎逻辑的。

当然,在开发一些OLTP系统时,删除存在层中的引用完整性约束并不是最佳实践;但对于类似于数据仓库的解决方案(先加载数据,然后整体检查),这可能是正确的方法。

林德华
2023-03-14

也许在manytone上使用可选的=true参数会有所帮助?

@Entity
@Table(name = "Child")
public class Child {
    @Id
    private Integer id;

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, optional = true)
    private Parent parent; 
}

我假设您直接从Hibernate创建模式。目标是使外键字段在数据库中可以为空。

杜昆琦
2023-03-14

如果使用关系,则不能使用JPA。将其设为manyTone表示外键字段中的值将存在于父表中。JPA将无法区分空fk值和父表中没有关联行的fk值。

如果确实必须这样做(在IMO中不应该这样做),则需要使用基本映射(而不是manyTone)来映射Child中的整数外键值。这允许它独立于现有的父实体进行设置-null表示null,值表示值。如果需要关联的父实体本身,则可以查询该父实体。

 类似资料:
  • 问题内容: 我有这个功能: 如您所见,它将字典转换成一个字典(没有可选的)。 我只想为值是任何类型的类使用新方法扩展该类,但是我无法为字典的通用参数添加约束。 这是我尝试的: 但失败并显示错误: 问题答案: 在Playground中尝试以下代码: 因为您不能在协议扩展的子句中指定确切的类型,所以可以准确检测到该类型的一种方法是使UNIQUELY符合协议(例如)。 为了获得的包装值类型,我在自定义协

  • 注释 原则 As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性、可读性。 As long as necessary(如有必要,尽量详尽):合理的注释、空行排版等,可以让代码更易阅读、更具美感。 单行注释 必须独占一行。// 后跟一个空格,缩进与下一行被注释说明的代码一致。 多行注释 避免使用 /*...*/ 这样的多行注释。有多行注释内容时,使用多个单行注释。

  • 代码组织 以组件为单位组织代码段; 制定一致的注释规范; 组件块和子组件块以及声明块之间使用一空行分隔,子组件块之间三空行分隔; 如果使用了多个 CSS 文件,将其按照组件而非页面的形式分拆,因为页面会被重组,而组件只会被移动; 良好的注释是非常重要的。请留出时间来描述组件(component)的工作方式、局限性和构建它们的方法。不要让你的团队其它成员 来猜测一段不通用或不明显的代码的目的。 提示

  • 标签 自闭合(self-closing)标签,无需闭合 ( 例如: img input br hr 等 ); 可选的闭合标签(closing tag),需闭合 ( 例如:</li> 或 </body> ); 尽量减少标签数量; <img src="images/google.png" alt="Google"> <input type="text" name="title"> <ul>

  • 根据CLRS第3版的定义,单连通有向图是指每对顶点(u,v)至多有一条唯一的路从u->v来的图。现在我读过的大多数答案都说,我们从图中的每个顶点运行DFS,如果在任何情况下我们找到一条交叉边或一条前向边,那么图就不是单连通的。我可以理解前向边的概念,但是在这个图上运行这个algo 1-->2<--3将给出一个结果:它不是单连通的,而这个图是单连通的。我们有一个从3->2或1->2的交叉边,这取决于

  • 我有两个类:< code>User和< code>UserProfile。 用户类别: 用户配置文件类: 当我使用此代码时,我在具有多对多关系的表用户配置文件中获得重复的实体。我使用 函数来保存对象。我做错了什么? 然后我删除 cascadeType,出现错误:对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例。 Hibernate日志: