【问题标题】:About hibernate inheritance mapping, why an entity can live without a table?关于hibernate继承映射,为什么实体没有表也能活?
【发布时间】:2014-07-24 13:04:57
【问题描述】:

在hibernate继承映射、JPA table-per-class策略中,

根实体不需要映射表,

子实体做,每个子实体都有一个表。

在我的理解中,实体是:一个带有映射配置的 java 类,应该映射到一个表,

那么,根实体如何作为没有要映射的表的实体存在呢?

如果它不需要映射表,为什么不使用@ma​​ppedSuperclass

我们可以使用这个根实体来查询吗?

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    如果您不想拥有根实体的实例,则根实体不需要表。

    例如,如果您有一个基类 Message 类,它有两个子类 Email 和 VoiceMessage,并且只需要 Email 和 VoiceMessage 的实例,那么没有理由为 Message 创建一个表,因为您永远不会创建任何 Message 实例: 仅适用于电子邮件或语音信息。

    它与 MappedSuperclass 非常不同的是,您仍然可以与基类 Message 建立 toOne 或 toMany 关联。例如,您可以有一个 Sender 实体,其中包含一组已发送的消息。您可以在根 Message 实体上创建查询。这样的查询当然会返回 VoiceMessage 或 Email 的实例。

    【讨论】:

    • 我们可以在多态查询中使用这个根实体吗?
    • 您可以在根消息实体上创建查询。所以答案是肯定的。
    猜你喜欢
    • 2013-10-31
    • 2012-02-20
    • 2017-12-07
    • 2011-11-22
    • 2010-11-25
    • 2011-07-25
    • 2015-08-02
    • 1970-01-01
    • 2020-12-12
    相关资源
    最近更新 更多