ORM框架:SpringDataJPA 复合主键标签@IdCla
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