OpenJPA - 在合并时不保留空关系值

时间:2017-02-16 20:41:17

标签: jpa openjpa

我在理解/解决我遇到的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天我一直在围绕着这个问题。

0 个答案:

没有答案