Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 使用JPARepositories处理抽象实体的正确方法?_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

Hibernate 使用JPARepositories处理抽象实体的正确方法?

Hibernate 使用JPARepositories处理抽象实体的正确方法?,hibernate,jpa,spring-data-jpa,Hibernate,Jpa,Spring Data Jpa,我有一堆表,它们有完全相同的列,比如ID、名称和描述。由于遗留原因,我无法更改这些表 在我的模型中,我使用@MappedSuperclass注释为它们创建了一个抽象的超类。然后我为它创建了一个存储库: JpaRepository<MyAbstractEntity, Long> JpaRepository 但这似乎不适用于JPARepository(或者说Hibernate?),因为它不是一个真正的实体 那么,处理这种层次结构的首选方法是什么呢?问题在于,存储库如何知道只基于抽象类

我有一堆表,它们有完全相同的列,比如ID、名称和描述。由于遗留原因,我无法更改这些表

在我的模型中,我使用@MappedSuperclass注释为它们创建了一个抽象的超类。然后我为它创建了一个存储库:

JpaRepository<MyAbstractEntity, Long>
JpaRepository
但这似乎不适用于JPARepository(或者说Hibernate?),因为它不是一个真正的实体


那么,处理这种层次结构的首选方法是什么呢?

问题在于,
存储库如何知道只基于抽象类查询哪个表?

对我来说,最好的方法是根据具体的类创建所需的存储库。

问题在于
存储库如何知道仅基于抽象类查询哪个表?

对我来说,最好的方法是根据具体类创建所需的存储库。

我假设您使用Hibernate作为持久性提供程序?当被要求映射超类时,它没有返回相关的JPA元模型类型。这在Hibernate 4.1.6中得到了修复,因此升级到该版本应该可以解决这个问题。

我假设您正在使用Hibernate作为持久性提供程序?当被要求映射超类时,它没有返回相关的JPA元模型类型。这在Hibernate 4.1.6中得到了修复,因此升级到该版本应该可以解决问题。

究竟什么是“似乎不起作用”?使用“@MappedSuperclass”时,它“不起作用”,但失败,没有托管类型错误。但是,对基类使用“@Entity”和“@Inheritation”确实有效。究竟什么是“似乎不起作用”?使用“@MappedSuperclass”则“不起作用”,但失败,没有托管类型错误。然而,在基类中使用“@Entity”和“@heritation”确实有效。我确实忘记了这一点。但是:实际上,它看起来像是使用返回类型来确定表,因此您可以为基类和返回子类的查询方法创建一个存储库,它看起来很有效。我确实忘记了这一点。但是:事实上,它看起来像是使用返回类型来确定表,因此您可以为基类和返回子类的查询方法创建一个存储库,它看起来很有效。我使用的是Hibernate(应该在原始文章中明确提到)-版本4.1.9-我发誓我在发布之前看到了这个错误,奇怪。如果使用“@Mappedsuperclass”或“@Entity”和“@heritation”,有什么区别吗?我们基本上是使用您在存储库中声明的域类型来查找id属性。我们使用JPA元模型API来实现这一点,因此假设您的提供者通过
Metamodel.managedType(…)
正确地公开了这一点,我们就可以了。这是否意味着它现在对您有效?是的,现在我再次尝试了“@Mappedsuperclass”,它工作正常。生成的表结构看起来与另一个方法相同,但是对于“@Mappedsuperclass”,我还可以使用“GenerationType.IDENTITY”作为ID,这很好,因为它与我的DBUnit测试一起工作得更好。有了“@Entity”和“@heritation”,我不得不切换到GenerationType.TABLE,这很难用DBUnit测试,因为生成的ID一直在变化。太棒了,听到这个消息太好了!)我正在使用Hibernate(应该在原始帖子中清楚地提到它)-版本4.1.9-我发誓我在发布之前看到了这个错误,奇怪。如果使用“@Mappedsuperclass”或“@Entity”和“@heritation”,有什么区别吗?我们基本上是使用您在存储库中声明的域类型来查找id属性。我们使用JPA元模型API来实现这一点,因此假设您的提供者通过
Metamodel.managedType(…)
正确地公开了这一点,我们就可以了。这是否意味着它现在对您有效?是的,现在我再次尝试了“@Mappedsuperclass”,它工作正常。生成的表结构看起来与另一个方法相同,但是对于“@Mappedsuperclass”,我还可以使用“GenerationType.IDENTITY”作为ID,这很好,因为它与我的DBUnit测试一起工作得更好。有了“@Entity”和“@heritation”,我不得不切换到GenerationType.TABLE,这很难用DBUnit测试,因为生成的ID一直在变化。太棒了,听到这个消息太好了!)