我想模拟几个对象关系,我目前还不确定这样做的聪明方法。假设Record
与不同的RecordSource有一个OneToMany关系。 RecordSources
的常见属性为long id
和boolean preferred
。其他属性是个人的,未来记录来源的数量可能会增加。
一种可能性是Record
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="record")
private List<GenericSimpleRecordSource> recordSources;
GenericSimpleRecordSource
看起来像这样:
@Entity
public class GenericSimpleRecordSource implements Serializable
{
public static enum Type {a,b}
@ManyToOne private Record record;
@NotNull
private Type sourceType;
@OneToOne(cascade = CascadeType.ALL,mappedBy="source")
private SimpleRecordSourceA sourceA;
@OneToOne(cascade = CascadeType.ALL,mappedBy="source")
private SimpleRecordSourceB sourceB;
}
SimpleRecordSourceA
和SimpleRecordSourceA
是个人@Entity
类。我对这种方法感到不舒服,使用继承可能会更好:
@Entity
@Inheritance(strategy= InheritanceType.TABLE_PER_CLASS)
@DiscriminatorColumn(name="type")
@DiscriminatorValue("generic")
public class GenericRecordSource
{
@Id @GeneratedValue(strategy=GenerationType.AUTO) private long id;
@ManyToOne private Record record;
private boolean preferred;
}
@Entity
@DiscriminatorValue("A")
public class RecordSourceA extends GenericRecordSource
{
...
}
@Entity
@DiscriminatorValue("B")
public class RecordSourceB extends GenericRecordSource
{
...
}
这似乎更聪明,但使用继承有什么缺点吗?我感谢对这两种方法的任何评论,甚至是另一种方法。
是否可以像这样对@OneToMany
的{{1}}关系进行建模?
Record