У меня две или более таблиц похожи друг на друга.
PARENT
ID | PK
NAME | VARCHAR
CHILD
ID |PK
NAME | VARCHAR
AGE | INT
Это не @Inheritance
ситуация, потому что они являются независимыми объектами и связаны друг с другом @OneToMany
или @ManyToOne
.
Я создаю класс сущностей друг для друга.
@Entity
public class Parent {
@Id
private Long id;
private String name;
@ManyToOne(mappedBy = "parent")
private Collection<Child> children;
}
@Entity
public class Child {
@Id
private Long id;
private String name;
private int age;
@OneToMany
private Parent parent;
}
Есть ли какой-нибудь хороший способ поделиться отображениями общих полей?
// @MappedSuperclass // is this what it is exactly for?
public abstract class Base {
// @Id protected Long id; // @@?
@Column(name = "name", nullable = false)
private String name;
}
@Entity
public class Parent extends Base {
@Id
@TableGenerator(...)
@GeneratedValue(...)
protected Long id;
@ManyToOne(mappedBy = "parent")
private Collection<Child> children;
}
@Entity
public class Child extends Base {
@Id
@TableGenerator(...)
@GeneratedValue(...)
protected Long id;
private int age;
@OneToMany
private Parent parent;
}
Это нормально?Возможно ли даже объявить @Id protected Long id;
на базе, оставив @TableGenerator
и @GeneratedVAlue
в расширенных классах?