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

JPA中的级联设置和hibernate中的外键冲突

夏侯林
2023-03-14
  1. 父级

在数据库子表中有一列ParentId->典型的一个(父)->多个(子)关系

现在我创建了两个实体

public class Parent
{
    @OneToMany(mappedBy="Parent", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    public Set<Child> getChildern()
    {
      ...
    }
}

public class Child
{
   @ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
   @JoinColumn(name="ParentId")
   public Parent getParent()
   { ... }
}
    null
  1. 我总是需要同时创建密钥OneToMany和ManyToOne的两个部分吗?还是我可以只创建ManyToOne,而不关心我有孩子的父对象?
  2. 什么会导致Hibernate给我一条消息,即没有子级的父级违反外键约束?

共有1个答案

幸弘扬
2023-03-14

首先,我很惊讶这段代码能正常工作。IMOmappedby=“parent”实际上应该是mappedby=“parent”(注意小写'p'),因为child类的parent属性称为parent而不是parent

其次,我建议您将注释放置在属性上,而不是访问器方法上。我发现它让整个代码

  • 更易读
  • 更易于维护,因为getter/setters可以通过Lombok在后台添加

但是,如果您执行parent.getChildren().remove(x)操作,则您需要在OneTomany上设置orphanremove=“true”

问题1

将删除父级和所有子级。这是常见的情况。

Java和JPA中的所有关系都是单向的,因为如果源对象引用目标对象,则不能保证目标对象也与源对象有关系。

从优秀的Java Persistence wiki书中。

奖金2

 类似资料:
  • 在数据库中,将有一个列,并对的列具有外键约束。 对于在删除时级联的外键约束,可能执行的一些操作包括、和。这给出了以下方案组合。 a:在JPA中对父级进行级联删除调用,在删除父行时删除数据库中的子级。 b:在JPA中级联删除,在父删除时将子表中的外键列设置为null。在这种情况下,@joincolumn中的和中的可能需要为true/false。 C:在JPA中进行级联删除,在数据库中对外键删除不做任

  • 我有一个@OneToOne关系映射。我可以获取记录并查看关系,但我无法创建记录并保留外键。目前,当在父表(FacilityGeneral)中创建新记录时,我也会在子表(FacilityLocation)中创建新记录,但是,子表中的外键不会自动创建。 我试图通过编程将创建为父表(FacilityGeneral)中主键的序列值分配给子表中的不同字段来持久化它,但由于序列#在对象持久化之前不会生成,因此

  • 我有这个型号 而我有这个方法 但是hibernate没有设置实际地址id和注册地址id(它是OneTONE) Hibernate:插入客户(名字、姓氏、中间名、性别)值(?、、?、?)2021-03-18 14:01:58.340警告12836---[nio-8080-exec-1]o.h.发动机。jdbc。spi。SqlExceptionHelper:SQL错误:0,SQLState:23502

  • 问题内容: 我有两个实体: 我正在尝试通过执行以下操作插入文件(以及随后的标签): 然后,我使用以下命令将文件插入DAO: 在我的日志中,我在“文件”表中看到一个插入,在标签表中看到2个插入,但是,指向我的文件表(file_id)的标签表中的外键为NULL。 我可能做错了什么? 问题答案: 您不是将标签的文件设置为文件,而是将标签的文件设置为文件。请记住,在OOP中,与关系模型相反,您必须设置关系

  • 如果我继续尝试持久化这个实体,我将得到中持久化。 做这件事的正确方法是什么。可能是我理解的不对。

  • 问题内容: 是否可以在不使用JPA在数据库中创建外键的情况下建立ManyToOne关联? 这些表由另一个系统拥有,并异步填充。因此,数据库中不能有FK。几乎总是,最终还是有联系。 问题是,即使ConstraintMode.NO_CONSTRAINT,JPA SchemaUpdate也会尝试添加FK。 [错误] ohthSchemaUpdate-无法添加外键约束 如果它没有使其余语句失败,我们可以忽