JPA地图关系涉及不同的类

时间:2014-09-15 09:55:16

标签: java spring jpa

我有一个与JPA关系有关的问题。

是否可以为不同的类定义一个关系?

Ej:Fooone-to-onemany-to-one类有Boo关系(或Too)(两者都可以扩展相同的抽象类)但不是与两者同时发生的关系。

谢谢!

更多详情

这将是:

@Entity
class Foo {
@Id
int id;
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="MOO_ID")
Moo moo;
}

Interface Moo{}

@Entity
class Too implements Moo{}
@Entity
class Boo implements Moo{}

我的数据库只需要一个对正确表Too或Boo的引用。

1 个答案:

答案 0 :(得分:0)

如果你让Moo成为一个抽象类并指定了一个继承策略,你就可以实现这个目标。

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Moo  {
   @Id int id;
}

然后是Foo:

@Entity
class Foo {
  @Id
  int id;

  @OneToOne(fetch=FetchType.LAZY)
  @JoinColumn(name="MOO_ID")
  Moo moo;
}

并且

@Entity
class Too extends Moo{}

@Entity
class Boo extends Moo{}

这样,Moo参考可以是Boo或Too。

您还应该选择哪种继承策略最适合您的方案。来自TABLE_PER_CLASS,SINGLE_TABLE和JOINED。