当前位置: 首页 > 面试题库 >

@MappedSuperclass不是JPA中的@Entity吗?

邰勇军
2023-03-14
问题内容

因此,我正在使用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].

有解决方法吗?


问题答案:

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

变更继承

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

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

额外:

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

变更模型(建议)

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



 类似资料:
  • 问题内容: 是否可以使用Spring的依赖项注入将bean注入JPA ? 我尝试使用@Autowire ServletContext,但是尽管服务器确实成功启动,但是在尝试访问bean属性时收到了NullPointerException。 问题答案: 可以使用以下说明将依赖项注入到不受Spring容器管理的对象中:http : //static.springsource.org/spring/do

  • 我有一个用注释的抽象实体: 然后我从中继承实体,在每个实体中定义它们的id: 现在我想创建一个通用的JpaRepository,它接受从我的Base Entity扩展的任何类: 但Spring出现了一个异常,称BaseEntity没有ID: 请检查Plog在回答中的评论。我可以在服务的构造函数中注入每种存储库类型来解决这个问题

  • 我在第一步使用Spring-Boot和JPA时遇到了麻烦。我从使用Gradle的Git中的一个非常简单的示例开始。

  • 为了解释这个问题,我需要参考POSTGRES中的一个函数: "Pgr_dijkstra"是POSTGIS的函数,而不是表。它返回源(11111)和目标(2222)之间的最短路径。结果是6列:“seq、path_seq、节点、边缘、成本和agg_cost”。 因为“pgr_dijkstra”是一个函数,所以我不能在代码中创建一个类并用@Entity注释它,还可以将@Id添加到“seq”中,并创建其他

  • 问题内容: 我们正在以模块化的方式与Spring,Hibernate和Maven开发Web应用程序。有定义数据访问和查看特定内容的核心项目,还有定义逻辑和实体()的模块,然后有定义控制器和视图的Web应用程序。 现在,我们有一个安全模块,定义了帐户和角色等安全实体,还有一个原型模块,定义了一些示例实体,例如客户和订单。两者都有一个内部定义,除了PersistenceUnit名称外,几乎都为空,因为

  • 问题内容: 我将JPA2与Hibernate结合使用,并尝试为我的实体引入一个通用的基类。到目前为止看起来像这样: 但是,对于每个表,都有一个序列要用作序列生成器。我该如何在子类中进行设置?我想我需要重写@GeneratedValue并使用@SequenceGenerator创建一个新的SequenceGenerator。 问题答案: 是的,有可能。您可以使用注释覆盖默认的生成器名称。 基类 序列