Eclipselink使用@OneToOne插入连接对象

时间:2012-03-07 16:51:35

标签: java jpa eclipselink

我有两个对象:A带主键A_ID,B带主键B_ID。 B具有A_ID的外键。在数据库级别,这意味着您可以将多个B对象指向同一个A,该关系实际上是一个A到一个B.A_ID和B_ID都是由序列生成的。我有以下EclipseLink注释来描述这种关系:

public class A {
    ...
    @OneToOne(mappedBy = "a", fetch = FetchType.LAZY, cascade = CascadeType.ALL, targetEntity = B.class)
    public B getB();
    ...
}

public class B {
    ...
    @OneToOne(fetch = FetchType.LAZY, targetEntity = A.class)
    @JoinColumn(name = "A_ID")
    public A getA();
    ...
}

这不起作用。如果我有一个A对象,其上设置了B对象,并且该B对象上有相同的A对象集,那么B对象不会被插入,所以当我然后执行A.getB()时它是null 。但是,如果我将A上的注释更改为@OneToMany,如下所示:

public class A {
    ...
    @OneToMany(mappedBy = "a", fetch = FetchType.LAZY, cascade = CascadeType.ALL, targetEntity = B.class)
    public Set<B> getB();
    ...
}

与其他所有相同,它现在插入B,但没有A_ID设置链接回A对象。合并逻辑(对于两种情况)归结为:

public void merge(A objA, B objB) {
    objA.setB(objB);
    objB.setA(objA);
    entitymanager.merge(objA);
}

我之前曾问过this question这两个对象共享相同ID的情况。除了共享ID(导致@MapsId注释)之外,该问题的唯一区别在于B对象也有cascade = CascadeType.ALL作为注释的一部分,但我在这种情况下尝试过,但它仍然失败。有没有人知道如何使用单独的ID为B对象使用@OneToOne来使用这个案例?

0 个答案:

没有答案