Mysql 更新One2One关系对象(JPA 2)
我有两个实体(User.class和Image.class),它们之间有一对一的关系。更新图像实体时出现问题。它在没有现有图像对象时工作,我只需创建一个新图像,将其添加到User(使用setter)对象并保存,如下所示: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); } 更新图像时出现问题。我必须手动将每个图像属性添加到现有图像对象中(请参见下面的方法)。如果使
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;