Jpaにおける表の自己関連付け

978 ワード

Jpaの1つのエンティティクラスは1つのテーブルに対応していますが、実際に適用されるテーブルはテーブルの前に関連しており、自身にも関連する場合があります.
企業情報テーブルを例にとると、親企業や子会社など、自分自身に関連する可能性があります.たとえば、多くの部門があるに違いありません.エンティティ・クラスを定義する場合は、次のようにします.
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class Enterprise {

    @Id
    @GeneratedValue
    private Long id;

    //    
    private String name;

    //   
    @OneToMany(mappedBy = "parentEnterprise")
    private Set childrenEnterprises = new HashSet<>();

    //   
    @ManyToOne
    @JoinColumn(name = "parent_id")
    private Enterprise parentEnterprise;

    //  
    @OneToMany(targetEntity = Dept.class)
    private Set depts = new HashSet<>();

}