PagingAndSortingRepository (Spring MCV) 和 Hibernate
PagingAndSortingRepository (Spring MCV) and Hibernate
我正在尝试使用 Spring 接口 PagingAndSortingRepository 创建一个分页系统。
我正在遵循 Internet 上的一些指南,但我卡在了第一步。
我用这种方式实现了 PagingAndSortingRepository
public interface ArtistaRepository extends PagingAndSortingRepository<Artista,Integer> {
List<Artista> findByNome(String nome);
}
如果我尝试 运行 网络应用程序,我会收到此错误:
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,我应该如何编辑我的代码?
提前致谢
试试这个代码,希望它对你有用。
//存储库代码
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();
声明 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>
我正在尝试使用 Spring 接口 PagingAndSortingRepository 创建一个分页系统。 我正在遵循 Internet 上的一些指南,但我卡在了第一步。
我用这种方式实现了 PagingAndSortingRepository
public interface ArtistaRepository extends PagingAndSortingRepository<Artista,Integer> {
List<Artista> findByNome(String nome);
}
如果我尝试 运行 网络应用程序,我会收到此错误:
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,我应该如何编辑我的代码?
提前致谢
试试这个代码,希望它对你有用。
//存储库代码
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();
声明 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>