предотвратить исключение NonUniqueObjectException в спящем режиме - PullRequest
2 голосов
/ 11 февраля 2012

Когда я пытаюсь добавить данное изображение в один и тот же город назначения дважды, я получаю следующее исключение:

NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [org.wah.model.ImageEntity#7]

Это хорошо, так как мне не нужны дубликаты.Я пытаюсь предотвратить это в коде:

public void addImageToDestination(int idDestination, String imageFileName){
    Destination destination = (Destination) getEntity(idDestination);

    ImageEntityDAO imageDao = new ImageEntityDAO();
    ImageEntity image = imageDao.getImage(imageFileName);

    if(image == null)
        image = new ImageEntity(imageFileName);
    else if(destination.getImages().contains(image)){
        return;
    }

    session.beginTransaction();
        destination.getImages().add(image);
    session.getTransaction().commit();
}

Конструкция else-if пытается определить, существует ли она, а затем ничего не делать и возвращать как есть.Однако условие else-if никогда не оценивается как TRUE, и выполняется код сеанса, что приводит к исключению NonUniqueObjectException.

Как я могу предотвратить это?

1 Ответ

3 голосов
/ 11 февраля 2012

Если вы имеете в виду, что destination.getImages().contains(image) никогда не оценивается как true и если, если два ImageEntities имеют один и тот же город, вы должны переопределить ImageEntity 'equals -метод:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    ImageEntity that = (ImageEntity) o;

    if (city != null ? !city.equals(that.city) : that.city != null) return false;

    return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...