【问题标题】:PagingAndSortingRepository (Spring MCV) and HibernatePagingAndSortingRepository (Spring MVC) 和 Hibernate
【发布时间】:2016-11-10 13:25:50
【问题描述】:

我正在尝试使用 Spring 接口 PagingAndSortingRepository 创建一个分页系统。 我正在遵循互联网上的一些指南,但我被困在第一步。

我以这种方式实现了 PagingAndSortingRepository

public interface ArtistaRepository extends PagingAndSortingRepository<Artista,Integer> {
    List<Artista> findByNome(String nome);  
}

如果我尝试运行 web 应用程序,我会收到此错误:

No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined

我使用 Hibernate Session 作为实体管理器。在我在网上看到的所有示例中,都使用了 JPA EntityManager

这是我的 configuration.xml 文件中的代码:

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
         <property name="sessionFactory" ref="sessionFactory" />            
    </bean>      

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>               
        <property name="packagesToScan" value="com.jeansedizioni.model"/>
   </bean>   

由于我没有使用 JPA EntityManager,我应该如何编辑我的代码?

提前谢谢你

【问题讨论】:

  • 使用EntityManager... 该项目被称为spring-data-JPA 是有原因的。这是关于 JPA,因此是 EntityManager 而不是 SessionFactory
  • 你能添加你的配置吗?从可用的信息中,我可以告诉你,在 spring 中声明 sessionFactory 不会自动作为实体管理器工作,你应该配置一个entityManagerFactory,正如错误所说。这个documentation 应该很有用。

标签: java hibernate spring-mvc spring-data-jpa paging


【解决方案1】:

声明 Hibernate 的会话工厂不起作用。正如 M. Deinum 同事所写,Spring-data-jpa 存储库只能与 jpa 实体管理器一起使用。

试试这个配置:

    <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <property name="showSql" value="true"/>
    <property name="generateDdl" value="false"/>
    <property name="database" value="<your database - Oracle, MySQL...>"/>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
    <property name="persistenceUnitName" value="default"/>
    <!-- spring based scanning for entity classes>-->
    <property name="packagesToScan" value="com.jeansedizioni.model"/>
</bean>


<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

【讨论】:

    【解决方案2】:

    试试这个代码,希望对你有用。

    //存储库代码

    public interface ArtistaRepository extends JpaRepository<Artista,Integer> {
        Page<Artista> findByNome(String nome,Pageable page);  
    }
    

    //服务代码

    int totalElements;
        int totalPages;
        int numberOfElements;
    
    Pageable pageable = new PageRequest(page,size,Sort.Direction.DESC,"id");
    
    Page<Artista> list=artistaRepository.findByNome(nome,pageable);
    
    totalElements=list.getTotalElements();
    numberOfElements=list.getNumberOfElements();
    totalPages=list.getTotalPages();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多