package org.hibernate.test; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import org.hibernate.annotations.GenericGenerator; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; import java.util.List; @Data @Entity @Table(name = "node") @ToString(exclude = {"parent"}) @EqualsAndHashCode(of = {"uuid"}) public class Node { @Id @GeneratedValue(generator = "uuid") @GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator") @Column(name = "uuid") private String uuid; @ManyToOne(cascade = CascadeType.ALL) @JoinColumn(name = "parent", referencedColumnName = "uuid") private Node parent; @OneToMany(mappedBy = "parent", fetch = FetchType.EAGER, cascade = CascadeType.ALL) private List children; }