package org.tests.level; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import java.util.Set; @Entity public class Level1 { @Id Long id; @ManyToMany(cascade = CascadeType.ALL) @JoinTable( name = "level1_level4", joinColumns = @JoinColumn(name = "level1_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "level4_id", referencedColumnName = "id") ) Set<Level4> level4s; @ManyToMany(cascade = CascadeType.ALL) @JoinTable( name = "level1_level2", joinColumns = @JoinColumn(name = "level1_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "level2_id", referencedColumnName = "id") ) Set<Level2> level2s; String name; public Level1(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Set<Level2> getLevel2s() { return level2s; } public Set<Level4> getLevel4s() { return level4s; } }