在hibernate中阻止NonUniqueObjectException

时间:2012-02-11 17:53:08

标签: java hibernate exception java-ee exception-handling

当我尝试将给定图像添加到同一目标城市两次时,我得到以下异常:

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 个答案:

答案 0 :(得分:3)

如果您的意思是destination.getImages().contains(image)永远不会评估为true,并且如果两个ImageEntities具有相同的城市,则应覆盖ImageEntity的{​​{1}} - 方法:

equals