Mysql 更新One2One关系对象(JPA 2)

Mysql 更新One2One关系对象(JPA 2),mysql,spring,jpa-2.0,entity-relationship,one-to-one,Mysql,Spring,Jpa 2.0,Entity Relationship,One To One,我有两个实体(User.class和Image.class),它们之间有一对一的关系。更新图像实体时出现问题。它在没有现有图像对象时工作,我只需创建一个新图像,将其添加到User(使用setter)对象并保存,如下所示: public void addImage(Image image){ image.setUser(this); setImage(image); } 更新图像时出现问题。我必须手动将每个图像属性添加到现有图像对象中(请参见下面的方法)。如果使

我有两个实体(User.class和Image.class),它们之间有一对一的关系。更新图像实体时出现问题。它在没有现有图像对象时工作,我只需创建一个新图像,将其添加到User(使用setter)对象并保存,如下所示:

public void addImage(Image image){
    image.setUser(this);
        setImage(image);
    }

更新图像时出现问题。我必须手动将每个图像属性添加到现有图像对象中(请参见下面的方法)。如果使用上面的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,您可以通过右键单击编辑器,导航到源代码并选择
generate Equals and Hashcode

生成这些方法。您的建议会导致在org.joda.time.chrono.assembledchronoloy.getZone上的线程“main”java.lang.StackOverflower中出现StackOverflowerError:Exception位于org.joda.time.chrono.ISOChronology.hashCode(ISOChronology.java:200)的org.joda.time.base.AbstractInstant.hashCode(AbstractInstant.java:278)的com.core.user.user.hashCode(user.java:249)的com.core.user.Image.hashCode(Image.java:94)。。。。
//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;