因此,我正在使用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].
有解决方法吗?
我可以提出两种解决方案:
您得到的异常清楚地描述了您的问题: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。 问题答案: 是的,有可能。您可以使用注释覆盖默认的生成器名称。 基类 序列