【发布时间】:2016-08-27 17:41:51
【问题描述】:
所以我正在使用 DerbyDB 并且正在设置一些实体。我有一个@MappedSuperclass,它被用作某些实体的超类(@Entity)。更具体地说,我有一个超类 User 和 3 个子类,即 admin、regular 和 guest。现在我有一个不同的实体,比如说file,它应该引用(作为它的字段之一)它的所有者。所以我创建了一个名为User owner 的字段。
我得到的错误是:
Exception Description: [File] uses a non-entity [User] as target entity in the relationship attribute [field owner].
有解决办法吗?
【问题讨论】:
-
您的错误显然特定于您使用的任何 JPA 实现(并且您没有告诉我们是哪一个)。我的 JPA 提供程序允许在关系中使用 MappedSuperclass。
-
@NeilStockton,哪个 JPA-provider 允许使用 MappedSuperclass 作为实体?从 oracle 文档开始:“映射的超类不能被查询,也不能在 EntityManager 或 Query 操作中使用。”
-
DataNucleus JPA 执行 IIRC,任何 JPA 供应商都可以为(有限的)JPA 规范提供自己的扩展(就像其他领域的其他人一样)。
-
@NeilStockton thx 获取信息,到目前为止,我只使用 EclipseLink 和 Hibernate,它们不允许 MappedSuperclass 成为实体
标签: java hibernate jpa inheritance orm