【发布时间】:2009-05-06 19:33:17
【问题描述】:
假设我有一个包含 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 方法有什么意义吗?
【问题讨论】: