java - 关于hibernate继承映射,为什么实体可以没有表而存在?

标签 java hibernate jpa

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

根实体不需要表来映射,

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

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

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

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

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

最佳答案

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

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

它与 MappedSuperclass 的不同之处在于,您仍然可以与基类 Message 建立 toOne 或 toMany 关联。例如,您可以有一个发送者实体,其中包含一组已发送的消息。您可以在根消息实体上创建查询。此类查询当然会返回 VoiceMessage 或电子邮件的实例。

关于java - 关于hibernate继承映射,为什么实体可以没有表而存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24934535/

相关文章:

java - 使用 CriteriaBuilder 一次删除多个对象

java - Spring JPA 无法将参数传递到引号中

hibernate - JPA 的乐观锁定是否知道在 Long.MAX_VALUE 之后循环到零?

java - 如何在关机/重新部署时关闭 HikariCP JNDI 数据源

java - 如何在没有互联网的情况下获取 phonegap 中的地理位置?

java - 为什么我们在 Java 中有 Arrays 和 Array

从表中检索记录时,Hibernate异常: org. hibernate.hql.internal.ast.QuerySyntaxException

java - 在java中获取数百万条记录

java - Ant、jvmarg、系统属性和引号

java - 没有主键或连接表的 Hibernate 多对一关系