如何使用JPA对此建模?
|
我想对几个对象关系建模,而我目前尚不确定执行此操作的明智方法。假设“ 0”与不同的RecordSources具有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
{
...
}
这似乎更聪明,但是使用继承有什么缺点吗?我感谢对这两种方法甚至其他替代方案的任何评论。
是否可以像这样从ѭ0建模@OneToMany
关系?
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY, mappedBy=\"record\")
private List<GenericRecordSource> recordSources;
没有找到相关结果
已邀请:
0 个回复