当我尝试将给定图像添加到同一目标城市两次时,我得到以下异常:
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。
如何防止这种情况发生?
答案 0 :(得分:3)
如果您的意思是destination.getImages().contains(image)
永远不会评估为true
,并且如果两个ImageEntities具有相同的城市,则应覆盖ImageEntity
的{{1}} - 方法:
equals