【问题标题】:Interface between two related JPA entities两个相关 JPA 实体之间的接口
【发布时间】:2010-04-30 22:27:02
【问题描述】:

场景如下(表格所示)

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 东西放了,但没有用。仍然说“交付引用了一个未知实体”

有什么想法吗?提前致谢

【问题讨论】:

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


    【解决方案1】:

    对于ChannelTABLE_PER_CLASS 继承策略使用abstract 超类怎么样?像这样的:

    @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;
    
        // ...
    }
    

    【讨论】:

    • 帕斯卡 - 谢谢。这是我在发布问题后开车回家时的想法:) 我会回来发布成功的或者如果我仍然有一些问题。再次感谢
    • 我刚刚创建了具体的超类(交付)并将传真和电子邮件作为子类。它适用于我的情况。如果需要,我仍然可以让他们稍后实现一些多态性的接口。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2014-02-07
    • 2020-05-14
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    相关资源
    最近更新 更多