OpenJPA删除实体

时间:2013-12-09 02:36:43

标签: jpa

我是JPA世界的新手,遇到了一些我不知道如何解决的麻烦。我希望有人不介意向我解释我哪里出错了。我得到了这样的数据库设计:

表B和D只是地图,因此不是实体。我已经像这样定义了实体A,C和E:

@Entity
@Table (name = "A")
public class A implements Serializable{
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "ID")
    private int id;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinTable(name = "B", 
        joinColumns = @JoinColumn(name="A_ID", nullable=false),
        inverseJoinColumns = @JoinColumn(name="C_ID", nullable=false))
    private C c;
    ....
}

@Entity
@Table(name = "C")
public class AddressEntity implements Serializable{
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "ID")
    private int id;

    @OneToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "D", 
        joinColumns = @JoinColumn(name="C_ID"),
        inverseJoinColumns = @JoinColumn(name="E_ID"))
    private List<E> e;
    ....
}

@Entity
@Table(name = "E")
public class E implements Serializable{

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "ID")
    private int id;

    @Column(name = "LINE")
    private String line;
}

A有C,C有多个E。 通过这种安排,我编写了测试,创建了一个New A,然后是一个New C并将其分配给A然后将两个New E分配给C,然后将它们分配给C,然后保持A。

然后我找到A并删除A并确保删除它的子项。 这个测试适用于hibernate但是因为我们的服务将在WebSphere 8上运行,所以我们将JPA实现切换到OpenJPA。在OpenJPA下,此测试失败,因为OpenJPA尝试在删除表B中的条目之前从表C中删除条目。这会引发异常,因为表B具有表C的外键约束。

我希望我在代表我的不正当理解的基础上犯了一个简单的错误,并且OpenJPA只是揭露了这一点。

0 个答案:

没有答案