在这个项目中,我有两个实体A和B,它们都与实体C有OneToOne关系。A和B引用了一些C。
@Entity
public class A {
@NotNull
@OneToOne(cascade = { CascadeType.ALL })
@JoinColumn(name = "fk_c", foreignKey = @ForeignKey(name = "fk_a_2_c"))
private C c;
}
@Entity
public class B {
@NotNull
@OneToOne(cascade = { CascadeType.ALL })
@JoinColumn(name = "fk_c", foreignKey = @ForeignKey(name = "fk_b_2_c"))
private C c;
}
@Entity
public class C {
@Nullable
@OneToOne(mappedBy = "c", fetch = FetchType.LAZY)
private A a;
@Nullable
@OneToOne(mappedBy = "c", fetch = FetchType.LAZY)
private B b;
}
到目前为止,使用CascadeType一切都很好。实体B中字段c上的所有内容。我们现在要删除实体B而不删除实体C。因此,我们将实体B中的级联更改为
@OneToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
现在,删除行为符合预期,但当持久化实体B时,实体C没有持久化级联,相反,我们得到了一个组织。springframework。道。InvalidDataAccessApiUsageException无效
Not-null property references a transient value - transient instance must be saved before current operation : xxx.B.c -> xxx.C
根据javax,我已经尝试放置所有级联类型(PERSIST、MERGE、REMOVE、REFRESH、DETACH)。持久性文档应产生与CascadeType相同的结果。全部。上述错误仍然存在。
那么:我如何保持级联类型的级联行为呢。全部不删除级联?
在一个较旧的问题/答案Hibernate: CasecadeType. ALL vs{CascadeType. PERSIST, CascadeType. MERGE, CascadeType. DETACH, CascadeType. REFRESH, CascadeType. REMOVE}我了解到javax.persistence的CascadeType枚举在使用Hibernate保存/保存OrUpdate时无法正常工作。
使用会话。持久化而不是会话。saveOrUpdate在我的例子中并不可取,因此我需要将实体上的级联从
@OneToOne(cascade = CascadeType.ALL)
到
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
@OneToOne
现在保存和删除这两项工作都很好。
问题内容: 我必须缺少SQLAlchemy的层叠选项的琐碎内容,因为我无法获得简单的层叠删除来正确操作-如果删除了父元素,则子对象将使用外键保留。 我在这里放了一个简洁的测试用例: 输出: 父母与子女之间存在简单的一对多关系。该脚本创建一个父级,添加3个子级,然后提交。接下来,它删除父级,但子级仍然存在。为什么?如何使孩子级联删除? 问题答案: 问题是sqlalchemy认为是父级的,因为这是您定
主要内容:JPA级联删除示例,输出结果级联移除用于指定如果父实体被移除,则其所有相关实体也将被移除。 以下语法用于执行级联删除操作 - JPA级联删除示例 在这个例子中,我们将创建两个相互关联的实体类,但要建立它们之间的依赖关系,我们将执行级联操作。 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,其中包含属性:,,以及标记为级联规范的类型的对象。 文件: StudentEntity.java - 第2步: 在包下创建
级联删除通常被用作数据库术语,用来描述删除一个数据行时自动删除关联的数据行的特征。EF Core 实现了一些不同的删除行为,并且允许对关联关系的删除行为进行配置。EF Core 还实现了相关的惯例,它会基于关系的必要性为每个关系配置有用的默认删除行为。 删除行为 删除行为是在 DeleteBehavior 枚举中定义的,可以将它传递给 OnDelete 流式 API 来控制主实体/父实体的删除是否
问题内容: 我是SQL新手,遇到了一个奇怪的问题。所以我有两个表OFFERS和SUPPLIER。这是供应商表。 这是OFFERS表。 所以现在,当我尝试像这样向offers表添加外键约束时 我收到一条错误消息:“ ORA-01735:无效的ALTER TABLE选项”。如果我删除最后一行,即“ ON UPDATE CASCADE”,则可以正常工作。那么,我在做什么错呢?我在互联网上看到了很多类似的
我有两个实体业务,由一个部门列表组成。 当我尝试删除一个业务实例时,我得到一个Mysql异常 无法删除或更新父行:外键约束失败(