@Entity
@Table(name = "base_object")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn
public abstract class BaseObject implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "name", nullable = false, unique = true)
private String name;
@Column(name = "ukey", unique = true)
private String key;
}
@Entity
public class SmallObject extends BaseObject {
@Column(name = "second_name", nullable = false)
private String secondName;
}
@Entity
public class BigObject extends BaseObject {
@Column(name = "second_name", nullable = false)
private String secondName;
@ManyToMany
@JoinTable(
name = "small_object_assignment",
joinColumns = @JoinColumn(name = "ukey1", referencedColumnName = "ukey"),
inverseJoinColumns = @JoinColumn(name = "ukey2", referencedColumnName = "ukey")
)
private List<SmallObject> objects;
}