Допустим, у меня есть класс Person, у которого есть коллекция объектов Dog. Отношения двунаправленные.
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 и последующее сохранение этого лица не приведет к автоматическому удалению собаки из постоянного хранилища ... для нее будет просто задано нулевое указание собаки.
Итак, я получаю что-то вроде:
Dog dog = dogDAO.getDogById(int id);
dogDAO.remove(dog);
Поскольку это веб-приложение, а Персоны и Собаки не сохраняются в памяти, это прекрасно работает, и я никогда не вызывал Person.removeDog (). В следующий раз, когда я загружу Человека, который изначально ссылался на эту собаку, она не будет содержать собаку, потому что она была удалена из хранилища. То же самое относится и к добавлению собаки:
Person person = personDAO.getPersonById(int id);
Dog dog = new Dog();
dog.setPerson(person);
dogDAO.save(dog);
Опять же, это прекрасно работает, и я никогда не вызывал Person.addDog ().
Есть ли смысл использовать методы addDog и removeDog в моем классе Person?