假设我有一个包含 Dog 对象集合的 Person 类。这种关系是双向的。
public class Person {
private List<Dog> dogs;
// getter and setter for dogs
}
public class Dog {
private Person person;
// getter and setter for person
}
好的,如果我只是在处理这些对象,我将在 Person 中有添加狗和删除狗的方法,这样客户端就不会直接使用集合。
public void removeDog(Dog dog) {
dogs.remove(dog);
dog.setPerson(null);
}
public void addDog(Dog dog) {
dog.setPerson(this);
dogs.add(dog);
}
或类似的规定。
我的问题是在服务层中使用这些对象时出现的。我可以通过 addDog 向一个人添加一条新狗,然后简单地保存将自动保留新狗的人。但是,通过 removeDog 删除狗然后保存人不会自动从持久存储中删除狗......它只会将狗引用设置为 null。
所以我最终得到了类似的东西:
Dog dog = dogDAO.getDogById(int id);
dogDAO.remove(dog);
因为这是一个 web 应用程序,并且 Persons 和 Dogs 不在内存中维护,所以它工作正常,我从未调用过 Person.removeDog()。下次我加载最初引用这条狗的人时,它不会包含这条狗,因为它已从存储中移除。同样的事情也适用于添加狗:
Person person = personDAO.getPersonById(int id);
Dog dog = new Dog();
dog.setPerson(person);
dogDAO.save(dog);
同样,这甚至可以正常工作,而且我从未调用过 Person.addDog()。
那么在我的 Person 类中使用 addDog 和 removeDog 方法有什么意义吗?