一尘不染

@MappedSuperclass不是JPA中的@Entity吗?

hibernate

因此,我正在使用DerbyDB,并且正在设置一些实体。我有一个@MappedSuperclass用作某些实体(@Entity)的超类。更具体地讲,我有一个超类User和子类3,即adminregularguest。现在,我有一个不同的实体,假设file该实体应引用其所有者(作为其字段之一)。因此,我创建了一个名为的字段User owner。我得到的错误是:

Exception Description: [File] uses a non-entity [User] as target entity in the relationship attribute [field owner].

有解决方法吗?


阅读 302

收藏
2020-06-20

共1个答案

一尘不染

我可以提出两种解决方案:

变更继承

您得到的异常清楚地描述了您的问题:User不是实体。使用接口声明为超类的任何类@MappedSuperclass都不能是实体 (在标准JPA中-取决于您的JPA提供者) …让我为您指出我刚刚对一个类似问题的回答

因此,您描述了将超类定义为抽象实体将为您提供所需的行为。

额外:

如果您选择继承映射策略,因为@Inheritance(strategy = InheritanceType.SINGLE_TABLE)您甚至不需要多个数据库表。这是一个很好的示例:JPA单表继承

变更模型(建议)

不要仅将用户实体划分为几个角色。将Enum所有所需的角色设为,并将其作为字段添加到您的User实体中。除非您需要您的管理员,来宾等成为自己的对象,否则这是更普遍的情况。

2020-06-20