gpt4 book ai didi

java - 在 hibernate 中防止 NonUniqueObjectException

转载 作者:行者123 更新时间:2023-12-04 05:58:16 26 4
gpt4 key购买 nike

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

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,并且 session 代码会运行,从而产生 NonUniqueObjectException。

我怎样才能防止这种情况发生?

最佳答案

如果您的意思是 destination.getImages().contains(image)从不评估为 true并且如果两个 ImageEntities 具有相同的城市,您应该覆盖 ImageEntityequals -方法:

@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;
}

关于java - 在 hibernate 中防止 NonUniqueObjectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9242533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com