【发布时间】:2014-07-24 13:04:57
【问题描述】:
在hibernate继承映射、JPA table-per-class策略中,
根实体不需要映射表,
子实体做,每个子实体都有一个表。
在我的理解中,实体是:一个带有映射配置的 java 类,应该映射到一个表,
那么,根实体如何作为没有要映射的表的实体存在呢?
如果它不需要映射表,为什么不使用@mappedSuperclass?
我们可以使用这个根实体来查询吗?
【问题讨论】:
在hibernate继承映射、JPA table-per-class策略中,
根实体不需要映射表,
子实体做,每个子实体都有一个表。
在我的理解中,实体是:一个带有映射配置的 java 类,应该映射到一个表,
那么,根实体如何作为没有要映射的表的实体存在呢?
如果它不需要映射表,为什么不使用@mappedSuperclass?
我们可以使用这个根实体来查询吗?
【问题讨论】:
如果您不想拥有根实体的实例,则根实体不需要表。
例如,如果您有一个基类 Message 类,它有两个子类 Email 和 VoiceMessage,并且只需要 Email 和 VoiceMessage 的实例,那么没有理由为 Message 创建一个表,因为您永远不会创建任何 Message 实例: 仅适用于电子邮件或语音信息。
它与 MappedSuperclass 非常不同的是,您仍然可以与基类 Message 建立 toOne 或 toMany 关联。例如,您可以有一个 Sender 实体,其中包含一组已发送的消息。您可以在根 Message 实体上创建查询。这样的查询当然会返回 VoiceMessage 或 Email 的实例。
【讨论】: