如何级联@ManyToOne与级联的双向关系?

时间:2015-08-18 07:52:16

标签: java hibernate

我想自动保留/合并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 个答案:

答案 0 :(得分:0)

我认为两者的@Cascade({CascadeType.MERGE})都是你想要的。

我可能会在没有地址的情况下创建并保留Person,然后在Address实体中创建类似的内容:

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

希望这有帮助。

答案 1 :(得分:0)

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

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

      

    如果仅指定了cascade = CascadeType.REMOVE,则不会执行自动操作,因为删除关系不是删除操作。

    1. 对于要保留两个实体的第二个问题,您应该使用 两个陈述在一起,像这样:
    2. person.setAddress(address);
      address.getPersons().add(person);
      

      请查看here以获取更多信息。