Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenJPA删除实体_Jpa - Fatal编程技术网

OpenJPA删除实体

OpenJPA删除实体,jpa,Jpa,我是JPA的新手,遇到了一些我不知道如何解决的问题。我希望有人不会介意向我解释我哪里做错了。我得到的数据库设计如下: @Entity @Table (name = "A") public class A implements Serializable{ @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name = "ID") private int id; @OneToOne(casca

我是JPA的新手,遇到了一些我不知道如何解决的问题。我希望有人不会介意向我解释我哪里做错了。我得到的数据库设计如下:

@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;
}

表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;
}
@实体
@表(name=“A”)
公共类A实现可序列化{
@Id@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“ID”)
私有int-id;
@OneToOne(级联=级联类型.ALL)
@JoinTable(name=“B”,
joinColumns=@JoinColumn(name=“A_ID”,nullable=false),
inverseJoinColumns=@JoinColumn(name=“C_ID”,nullable=false))
私人C C;
....
}
@实体
@表(name=“C”)
公共类AddressEntity实现可序列化{
@Id@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“ID”)
私有int-id;
@OneToMany(级联=级联类型.ALL)
@JoinTable(name=“D”,
joinColumns=@JoinColumn(name=“C_ID”),
inverseJoinColumns=@JoinColumn(name=“E_ID”))
私人名单e;
....
}
@实体
@表(name=“E”)
公共类E实现了可序列化{
@Id@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“ID”)
私有int-id;
@列(name=“LINE”)
专用字符串线;
}
A有一个C,C有多个E。 根据这种安排,我编写了测试,创建了一个新的a,然后是一个新的C,并将其分配给a,然后是两个新的E,并将它们分配给C,然后是持久化a

然后我找到并删除A,并确保其子项已删除。 此测试使用hibernate进行,但由于我们的服务将在WebSphere8上运行,因此我们将JPA实现切换到OpenJPA。在OpenJPA下,该测试失败,因为OpenJPA试图在删除表B中的条目之前删除表C中的条目。这会引发异常,因为表B对表C具有外键约束


我希望我只是犯了一个简单的错误,基于对我的不正确理解,OpenJPA只是暴露了这一点。

'因为我们的服务将在WebSphere 8上运行,所以我们将JPA实现切换到OpenJPA'我不明白为什么您认为hibernate与WebSphere不兼容。也许您忘了排除WebSphere内置的javax.persistence?嗨,Gerry,谢谢您的回复。我的印象是OpenJPA和Hibernate是JPA的实现,IBM/Websphere不支持Hibernate,所以我们不得不使用OpenJPA。我认为您的理解有点错误。Hibernate实现了JPA,OpenJPA也是。JPA是JavaEE的一部分,许多容器(包括WebSphere)都支持JavaEE。然而,许多人认为一个实现是不兼容的,而实际上它只是与容器提供的另一个实现冲突。我建议您在WebSphere上尝试一个简单的hello world hibernate JPA。我很有信心你能成功