我在理解/解决我遇到的OpenJPA问题时遇到了问题,希望有人可以提供帮助。
基本上,我有以下两个实体:
@Entity
@Table(name = "images")
public class Image {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@Column(name = "path")
private String path;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
}
@Entity
@Table(name = "people")
public class Person {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@ManyToOne
@JoinColumn(name = "image_id")
@ForeignKey(name = "fk_person-image")
private Image image;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Image getImage() {
return image;
}
public void setImage(Image image) {
this.image = image;
}
}
如您所见,Person
可以有Image
。这是一个可选列,支持null
值。当来自REST Web服务的调用更新Person
更改Image
字段时,如果Image
设置为null
,则数据库未更新但是,如果将Image
更改为其他现有Image
,则会保存。
我怀疑这与Person
来自外部(分离)的事实有关,因为如果我从DAO服务获得Person
,请设置{{1转到Image
并使用该实例调用更新/合并方法,它正在更新数据库。
我可以通过添加以下属性来实现它:
null
然而,这似乎有一些缺点,因为从DB获取时不再填充其他关系。 (例如,检索建筑物时建筑物中的房间)
之前有没有遇到过这个?关于如何处理这个问题的任何想法?我很想测试Hibernate / Eclipselink,看看他们是否/如何处理这个问题。
任何帮助都会受到赞赏,过去2天我一直在围绕着这个问题。