有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何通过级联来级联@ManyToOne双向关系?

我想自动持久化/合并人的Address实体。一旦创建,任何人都应该可以更新它们,但如果删除了Person,则不会将其删除

//each person can only have one address
@Entity
public class Person {
    @ManyToOne
    private Address address;
}


//one address can be assigned to multiple persons (eg family members)
@Entity
public class Address {
    @OneToMany
    private List<Person> persons;
}

问题:

  1. 我应该如何为这个需求编写cascade注释
  2. 我将如何创建这些实体person.setAddress(address)还是address.getPersons().add(person)

共 (2) 个答案

  1. # 1 楼答案

    1. 为了回答您的第一个问题,为了满足您的需求 应使用cascade=CascadeType.REMOVE避免删除 Address如果删除了Person
    @OneToMany(cascade = CascadeType.REMOVE mappedBy = "person")
    

    你可以看看this article它解释了在相同情况下的相同行为,它说:

    If only cascade=CascadeType.REMOVE is specified no automatic action is taken since removing a relationship is not a remove operation.

    1. 对于要持久化这两个实体的第二个问题,您应该使用 两种说法合在一起,如下所示:
    person.setAddress(address);
    address.getPersons().add(person);
    

    更多信息,请查看here

  2. # 2 楼答案

    我想这两个网站上的@Cascade({CascadeType.MERGE})都是你想要的

    我可能会创建并持久化一个没有地址的Person,然后在Address实体中有如下内容:

    public void addPerson(Person person) {
       persons.add(person);
       person.setAdderess(this);
    }
    

    希望这有帮助