更新One2One关系对象(JPA 2)

时间:2013-06-02 12:31:48

标签: mysql spring jpa-2.0 entity-relationship one-to-one

我有2个具有OneToOne关系的实体(User.class& Image.class)。更新Image实体时出现问题。它没有现有的Image Object时工作,我只是简单地创建一个新的Image,将它添加到User(使用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(),它只保存新记录而不删除现有的Object,导致多个记录出现在数据库中。

有人可以看看并帮助我找出问题所在吗?感谢

//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;

1 个答案:

答案 0 :(得分:0)

您需要为两个实体实施equals & hashcode。如果没有这些方法,持久性提供程序无法确定对象是否存在。

如果您使用Eclipse,则可以通过右键单击编辑器,导航到源并选择Generate Equals and Hashcode来生成这些方法。