OpenJPA-合并时未保留空关系值

OpenJPA-合并时未保留空关系值,jpa,openjpa,Jpa,Openjpa,我在理解/找出OpenJPA的问题时遇到了问题,我希望这里的人能帮我解决 基本上,我有以下两个实体: @Entity @Table(name = "images") public class Image { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name = "id") private Long id; @Column(name = "name") priva

我在理解/找出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;
    }
}
如您所见,一个
可以有一个
图像
。这是一个可选列,支持
null
值。当REST Web服务调用来更新
人员
更改
图像
字段时,如果
图像
设置为
null
,则不会更新数据库,但是如果
图像
更改为不同的现有
图像
,则会保存

我怀疑这与
Person
从外部进入(分离)的事实有关,因为如果我从DAO服务获得
Person
,将
Image
设置为
null
,并使用该实例调用update/merge方法,它将更新数据库

我可以通过添加以下属性使其工作:

<property name="openjpa.DetachState" value="fetch-groups(DetachedStateField=false)"/>

然而,这似乎有一些缺点,因为从数据库获取数据时,不再填充其他关系。(例如,检索建筑时建筑中的房间)

以前有人遇到过这种情况吗?关于如何处理这个问题有什么想法吗?我很想测试一下Hibernate/Eclipselink,看看他们是否/如何处理这个问题


任何帮助都将不胜感激,过去两天我一直在绞尽脑汁

你怎么坚持?你能把一些片段也贴在这里吗?我还想知道多人关系不是双向的,对吗?你试过使用mappedBy吗?(这可能无法解决实际问题,我只是问:))你尝试过这种方法吗?