我有 2 个具有一对一关系的实体(User.class 和 Image.class)。更新图像实体时出现问题。当没有现有的图像对象时它可以工作,我只需创建一个新图像,将其添加到用户(使用setter)对象并保存它,如下所示:
public void addImage(Image image){
image.setUser(this);
setImage(image);
}
..
//method used to save the user object
@Override
@Transactional(readOnly=false)
public User save(User user) {
User aUser = userRepository.save(user);
return aUser;
}
更新图像时出现问题。我必须手动将每个图像属性添加到现有图像对象(请参阅以下方法)。如果我使用上面的 addImage(),它只会保存新记录,而不会删除现有对象,从而导致数据库中出现多条记录。
有人可以看一下并帮助我找出问题吗?谢谢
//Add a new Profile Image
public void addImage(Image image){
Image oldImg = getImage();
image.setUser(this);
if(oldImg == null){
setImage(image);
return;
}
oldImg.setName(image.getName());
oldImg.setVersion(image.getVersion());
}
User & Image entity extracts
User Entity
@OneToOne(targetEntity=Image.class,
mappedBy="user",
fetch=FetchType.LAZY,
cascade={CascadeType.ALL},
orphanRemoval=true)
private Image image;
...
Image Entity
@JsonIgnore
@OneToOne
@JoinColumn(name="userid")
private User user;
最佳答案
您需要为两个实体实现equals & hashcode
。如果没有这些方法,持久性提供程序无法确定对象是否存在。
如果您使用 Eclipse,则可以通过右键单击编辑器、导航到源代码并选择生成等于和哈希码
来生成这些方法。
关于mysql - 更新 One2One 关系对象 (JPA 2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16882790/