两个相关JPA实体之间的接口

时间:2010-04-30 22:27:03

标签: java orm jpa ejb-3.0 java-ee-5

方案如下(显示的表格)

Delivery table
------
id  channelId   type
10  100         fax
20  200         email

Fax table
----
id   number
100  1234567
101  1234598

Email table
-----
id   email
200  a@a.com
201  b@b.com 

基本上是交付和渠道实体之间的一对一关系,但由于每个具体渠道(传真,电子邮件)都有不同的成员,我想在两个实体之间创建一个通用接口(通道)并将其用于@OneToOne关系。在我看来这是一个很简单的场景,你们很多人可能已经经历过,但我无法成功。我试过把那个targetEntity的东西但没有用。仍然说“交付引用了一个未知的实体”

有什么想法吗?提前谢谢

1 个答案:

答案 0 :(得分:1)

abstractChannel继承策略使用TABLE_PER_CLASS超类怎么样?像这样:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Channel {
    @Id
    @GeneratedValue
    private Long id;

    // ...
}

@Entity
public class Fax extends Channel {
}

@Entity
public class Email extends Channel {
}

@Entity
public class Delivery {
    @Id
    @GeneratedValue
    private Long id;

    @OneToOne
    private Channel channel;

    // ...
}