如何使用JPA进行建模?

时间:2011-06-14 19:58:04

标签: java inheritance jpa data-modeling

我想模拟几个对象关系,我目前还不确定这样做的聪明方法。假设Record与不同的RecordSource有一个OneToMany关系。 RecordSources的常见属性为long idboolean 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;
}

SimpleRecordSourceASimpleRecordSourceA是个人@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

0 个答案:

没有答案