Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate Spring数据Jpa删除映射上的外键行?_Hibernate_Jpa_Spring Data Jpa_One To Many_Cascading Deletes - Fatal编程技术网

Hibernate Spring数据Jpa删除映射上的外键行?

Hibernate Spring数据Jpa删除映射上的外键行?,hibernate,jpa,spring-data-jpa,one-to-many,cascading-deletes,Hibernate,Jpa,Spring Data Jpa,One To Many,Cascading Deletes,这是我的第一个实体 @Entity @Table(name = "person") public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; private String firstName; private String lastName; // Removed other stuff for brevi

这是我的第一个实体

@Entity
@Table(name = "person")
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;    

    private String firstName;
    private String lastName;

    // Removed other stuff for brevity
}
这是我的第二个实体

@Entity
@Table(name = "membership")
public class Membership {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String membershipType;

    // Help here, I need another column called person_id which is what will correspond 
    // to persons or person rows from person table
}
基本上,在
person
表中,我们将有
n
人(
n
行)。在
成员资格
表中,每个人可以有3-4列(取决于他们的
成员资格类型
,因为每个人可以有多个成员资格,如主要、组、个人、次要等,请原谅业务逻辑)。所以在现实中,
membership
表可能有超过
n

现在我有几个问题

  • 这是来自
    person->membership
    表的
    OneToMany
    还是
    manytone
    ?我从
    person->membership表猜到了它的
    OneToMany

  • 如何在jpa注释和实体类中实现这种映射?我需要这个用于删除操作,即,如果我删除
    成员行
    ,则相应的
    人员行
    不应被删除。但是,如果我删除
    个人行
    所有相应的
    成员行
    都应该被删除。如何实现这种映射和功能


  • 个人
    -而不是Person.id-添加到您的
    会员资格

    @ManyToOne
    private Person person;
    
    这大致可以理解为“许多会员可以属于一个人”。如果删除一个或多个
    成员
    ,则不会删除
    人员
    ;它不会再删除会员资格了

    要删除一名
    人员的所有
    成员资格
    ,请在删除
    人员
    时,将成员资格列表添加到
    人员

    @OneToMany(cascade = CascadeType.ALL, mappedBy="person") // maybe CascadeType.REMOVE is enough for you
    private List<Membership> memberships = new ArrayList<>();
    
    @OneToMany(cascade=CascadeType.ALL,mappedBy=“person”)//也许CascadeType.REMOVE对你来说就足够了
    私有列表成员身份=新的ArrayList();
    
    实际上,如果没有这一点,您将无法在删除其所有
    成员之前删除任何
    人员
    ;后者对
    Person
    具有外键约束

    这大致可以理解为“一个人可以拥有多个成员”。如果您删除
    个人
    ,其所有
    会员资格也将被删除

    列表是必需的,因为这样JPA可以将删除级联到
    成员身份
    ,因为存在
    级联类型.ALL
    (或remove)


    属性
    mappedBy
    告诉JPA检查要映射到的字段
    person
    。如果JPA无法找到要映射的字段,它将创建一个单独的映射表。

    Person
    -而不是Person.id-添加到您的
    会员资格中

    @ManyToOne
    private Person person;
    
    这大致可以理解为“许多会员可以属于一个人”。如果删除一个或多个
    成员
    ,则不会删除
    人员
    ;它不会再删除会员资格了

    要删除一名
    人员的所有
    成员资格
    ,请在删除
    人员
    时,将成员资格列表添加到
    人员

    @OneToMany(cascade = CascadeType.ALL, mappedBy="person") // maybe CascadeType.REMOVE is enough for you
    private List<Membership> memberships = new ArrayList<>();
    
    @OneToMany(cascade=CascadeType.ALL,mappedBy=“person”)//也许CascadeType.REMOVE对你来说就足够了
    私有列表成员身份=新的ArrayList();
    
    实际上,如果没有这一点,您将无法在删除其所有
    成员之前删除任何
    人员
    ;后者对
    Person
    具有外键约束

    这大致可以理解为“一个人可以拥有多个成员”。如果您删除
    个人
    ,其所有
    会员资格也将被删除

    列表是必需的,因为这样JPA可以将删除级联到
    成员身份
    ,因为存在
    级联类型.ALL
    (或remove)


    属性
    mappedBy
    告诉JPA检查要映射到的字段
    person
    。如果JPA无法找到要映射的字段,它将创建一个单独的映射表。

    1.在
    成员资格
    表中,这会创建一个名为
    人员
    的列吗?2.我们应该做
    newarraylist()当我们声明
    列表成员身份时正确
    ?@theprogrammer 1。将参照表
    person
    id
    创建名为
    person\u id
    的列。2.这是一种方式。但它也可以在第一个
    成员身份添加到
    个人之前初始化
    EntityManager
    在需要时自动初始化它,但是如果它是
    null
    ,您当然不能添加任何
    成员身份。哦,好的,谢谢。最后一个疑问。在您提供的
    @OneToMany
    代码中,它还会在
    Person
    表中创建一个新列吗?如果是这样的话,该列的名称是什么?@程序员:不,它没有。这个列表纯粹是Java方面的。如果有某个列,它只能引用一个
    成员资格
    ,对吗?1.在
    成员资格
    表中,这会创建一个名为
    人员
    的列吗?2.我们应该做
    newarraylist()当我们声明
    列表成员身份时正确
    ?@theprogrammer 1。将参照表
    person
    id
    创建名为
    person\u id
    的列。2.这是一种方式。但它也可以在第一个
    成员身份添加到
    个人之前初始化
    EntityManager
    在需要时自动初始化它,但是如果它是
    null
    ,您当然不能添加任何
    成员身份。哦,好的,谢谢。最后一个疑问。在您提供的
    @OneToMany
    代码中,它还会在
    Person
    表中创建一个新列吗?如果是这样的话,该列的名称是什么?@程序员:不,它没有。这个列表纯粹是Java方面的。如果有某个栏目,它只能引用一个
    会员资格
    ,对吗?