Generic Spring Data JPA存储库实现,用于按类类型加载数据

 V体验_数码IT 发布于 2023-01-30 18:13

我正在使用Spring Data JPA 1.4.3.RELEASE和Hibernate 4.2.7.Final我能够成功创建一个Base Repository类,其内容如下:http: //docs.spring.io/spring-data/jpa /docs/1.4.2.RELEASE/reference/html/repositories.html#repositories.custom-behaviour-for-all-repositories

            @NoRepositoryBean
            public interface BaseRepository 
            extends JpaRepository

            @NoRepositoryBean
            public class BaseRepositoryImpl
            extends SimpleJpaRepository implements BaseRepository {

我能够成功地使用:

            public interface FlowerRepository extends BaseRepository {

现在,我正在尝试编写一个通用实现(扩展基本存储库)来加载所有引用数据,如Flower类型.那是因为我不希望每个"类型"数据或"引用"数据都有一个存储库.我希望能够通过传递特定的"类"类型(实现特定于引用数据类型的接口)来使用通用存储库来管理它.对于Eg

            loadAll(FlowerType.class)

我使用HBM来映射hibernate实体,所以我有:

            
            
            
                
                xxx.BaseReferenceType
                
                    
                    
                

            public class FlowerType extends BaseReferenceType implements ReferenceEntity

            public abstract class BaseReferenceEntity extends BaseEntity implements
    ReferenceEntity

            public abstract class BaseEntity implements DomainEntity

            public interface ReferenceEntity {

持久性XML:

            
            
                
                    org.hibernate.ejb.HibernatePersistence
                    ENABLE_SELECTIVE
                    
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                    
                
            

Hibernate配置:

            
            
            
                
                    
                    
                
            

所以我查看了一些教程链接和SO帖子并做了一些工作基于:

Spring Jpa将自定义功能添加到所有存储库,同时将其他自定义功能添加到单个存储库

我有 :

            @NoRepositoryBean
            public interface CustomReferenceDataRepository, PK extends Serializable> {
                public Map findAll(Class clz);
            }

            public interface ReferenceDataRepository extends BaseRepository, CustomReferenceDataRepository {
            }

            public class ReferenceDataRepositoryImpl, PK extends Serializable>
                    implements CustomReferenceDataRepository {

                @PersistenceContext
                private EntityManager em;


                @Override
                public Map findAll(Class clz) {
                //do whatever
                    return null;
                }

            }

结束了一个例外:

            Caused by: java.lang.IllegalArgumentException: Not an managed type: class xxx.BaseEntity
                at org.hibernate.ejb.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:200) ~[hibernate-entitymanager-4.2.7.Final.jar:4.2.7.Final]
                at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.(JpaMetamodelEntityInformation.java:68) ~[spring-data-jpa-1.4.3.RELEASE.jar:na]
                at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getMetadata(JpaEntityInformationSupport.java:65) ~[spring-data-jpa-1.4.3.RELEASE.jar:na]
                at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:146) ~[spring-data-jpa-1.4.3.RELEASE.jar:na]

我知道Hibernate没有管理"BaseEntity",但我无法弄清楚我缺少什么.

我是否需要为参考数据实现通用存储库?如果是的话,我做错了什么?任何指导赞赏.谢谢.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有