2017-10-17 24 views
0

在我的應用程序中,我有3個實體。 Z,A和B.Hibernate可以將子類同時作爲父節點

ž - > A是一對多和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; 

實體答:

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

回答

0

看起來你在你的代碼中的錯誤,你有一個一對多Z-> B的關係。 @OneToMany(cascade = CascadeType.ALL, mappedBy = "z") private Set<B> bSet;

應該

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

不過,這並不能完全解答您的問題。父母和子女關係是繼承的一部分,但這些類之間沒有繼承關係。

  1. Z是A的父

@Entity @Table(name = "A") public class A extends Z {需要擴展類Z.

類A將接收所有等級Z的屬性爲是繼承的性質。 正如你所看到的,這已經在打破我們的繼承,因爲Z類對A有一個參考。理想情況下,你不應該在這種情況下擴展Z並且忘記Z是A的父項。

所以簡短的回答,從技術上講這是不可能的。

相關問題