2017-10-17 3 views
0

Dans ma demande, j'ai 3 entités. Z, A et B.Hibernate peut être un enfant en même temps

Z -> A est OneToMany et Z est la société mère de A. A -> B est OneToOne et A est le parent de B.

Est-ce techniquement possible? Qu'une Entité peut être un enfant et un parent en même temps?

Entité 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; 

Entité 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; 

Entité B:

@Entity 
public class B{ 

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

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

Répondre

0

On dirait que vous avez une erreur dans votre code où vous avez un à plusieurs relation pour Z-> B. @OneToMany(cascade = CascadeType.ALL, mappedBy = "z") private Set<B> bSet;

devrait être

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

Pourtant, cela ne répond pas complètement à votre question. Les relations parents-enfants font partie de l'héritage, mais il n'y a pas d'héritage entre ces classes.

  1. Z est un parent de A.

@Entity @Table(name = "A") public class A extends Z { a besoin d'étendre la classe classe Z.

A recevra toutes les propriétés de la classe Z comme la nature de l'héritage. Comme vous pouvez le voir, cela brise déjà notre héritage car la classe Z a une référence à A. Idéalement, vous ne devriez pas étendre Z dans ce cas et oublier que Z est un parent de A.

Donc, une réponse courte, Techniquement, ce n'est pas possible.