Hibernate可以将子类同时作为父类

时间:2017-10-17 14:27:19

标签: hibernate

在我的应用程序中,我有3个实体。 Z,A和B.

Z - > A是OneToMany,Z是A的父。 A - > B是OneToOne,A是B的父母。

技术上可行吗?一个实体可以同时成为一个孩子和父母吗?

实体Z:

@Entity
@Table(name = "Z")
public class Z {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "z")
    private Set<B> bSet;

实体A:

@Entity
@Table(name = "A")
public class A {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @ManyToOne
    @JoinColumn(name = "z_id")
    private Z z;

    @OneToOne(cascade = CascadeType.ALL, mappedBy = "a")
    private B b;

实体B:

@Entity
public class B{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @OneToOne
    @JoinColumn(name = "a_ID")
    private A a;

1 个答案:

答案 0 :(得分:0)

您的代码中看起来有一个错误,即您对Z-&gt; B有一对多的关系。 @OneToMany(cascade = CascadeType.ALL, mappedBy = "z") private Set<B> bSet;

应该是

@OneToMany(cascade = CascadeType.ALL, mappedBy = "z") private Set<A> aSet;

尽管如此,这还不能完全回答你的问题。父子关系是继承的一部分,但这些类之间没有继承。

  1. Z是A的父母。
  2. @Entity @Table(name = "A") public class A extends Z {需要扩展Z类。

    类A将接收所有类Z的属性,这是继承的本质。 正如你所看到的,这已经打破了我们的继承,因为类Z有一个对A的引用。理想情况下,你不应该在这种情况下扩展Z并忘记Z是A的父。

    如此简短的回答,从技术上说这是不可能的。