ORM框架:SpringDataJPA 复合主键标签@IdClass的使用、以及No supertype found异常解决

1.前景

JPA作为一种持久层框架的指导思想,对于数据库实体的复合主键,提到有两种方式可以实现:
1>@IdClass标签的使用; 2> @EmbededId标签的使用。
具体细节,可参照官方文档介绍:JPA Composite Primary Key---JPA复合主键

2.项目中使用

项目中有一个MerchantsProduct表,有两个字段:mid 和 productcode。这个两个字段一起,构成一个复合主键。
同时这个实体结合SpringDataJPA的findAll分页使用,负责前端展示。
最终决定选择使用@IdClass这种方式,更符合常规的方法。

3.问题

If you try to use findAll(Pageable)on a PagingAndSortingRepository you get an "java.lang.IllegalStateException: No supertype found" if the entity key is defined using @IdClass and you're using Hibernate 4.1.9

具体解决方式:使用maven中排除依赖传递 pom.xml的<exclusions></exclusions>,将hibernate-core、hibernate-entitymanagement默认的4.1.8.Final版本,升高为4.2.9.Final版本,才得以解决java.lang.IllegalStateException: No supertype found异常。

参考文章:
1.Spring Data Jpa 复合主键 @IdClass使用
2.JPA Composite Primary Key---JPA复合主键
3.SpringDataJPA: Can't use pagination (Pageable) with @IdClass entities (spring-data-jpa 1.4.3 & Hibernate 4.1.9)
4.maven中排除依赖传递 pom.xml的exclusions

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容