解决方案暂无,先选择用原生Sql语句进行分页查询,如有大神有解决方案,劳烦在下方留言
原因分析:可能是sqlserver数据库的方言导致的hibernate查询出现问题,通过重写父类SQLServerDialect
中的getLimitString方法还是无法解决问题。
Eclipse对出现的问题有如下提示:
Hibernate:
select
TOP ? customer0_.cust_id as cust_id1_0_,
customer0_.cust_name as cust_nam2_0_,
customer0_.cust_source as cust_sou3_0_,
customer0_.cust_industry as cust_ind4_0_,
customer0_.cust_level as cust_lev5_0_,
customer0_.cust_linkman as cust_lin6_0_,
customer0_.cust_phone as cust_pho7_0_,
customer0_.cust_mobile as cust_mob8_0_
from
cust_customer customer0_
16:21:13.380 [http-bio-8080-exec-8] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - “@P0”附近有语法错误。
select
TOP ? customer0_.cust_id as cust_id1_0_,
customer0_.cust_name as cust_nam2_0_,
customer0_.cust_source as cust_sou3_0_,
customer0_.cust_industry as cust_ind4_0_,
customer0_.cust_level as cust_lev5_0_,
customer0_.cust_linkman as cust_lin6_0_,
customer0_.cust_phone as cust_pho7_0_,
customer0_.cust_mobile as cust_mob8_0_
from
cust_customer customer0_
16:21:13.380 [http-bio-8080-exec-8] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - “@P0”附近有语法错误。
dao层语句:
public List<Customer> getPageList(DetachedCriteria dc, Integer startIndex, Integer pageSize) {
SessionFactory sessionfac = getHibernateTemplate().getSessionFactory();
Session session = sessionfac.openSession();
String hql="from Customer";
Query query = session.createQuery(hql);
query.setFirstResult(startIndex);
query.setMaxResults(pageSize);
List list = query.list();
SessionFactory sessionfac = getHibernateTemplate().getSessionFactory();
Session session = sessionfac.openSession();
String hql="from Customer";
Query query = session.createQuery(hql);
query.setFirstResult(startIndex);
query.setMaxResults(pageSize);
List list = query.list();
// List<Customer> list = (List<Customer>) getHibernateTemplate().findByCriteria(dc, startIndex, pageSize);
// return list;
return null;
}
return null;
}
spring xml配置文件:
<bean name="customerService" class="cn.itcast.service.impl.CustomerServiceImpl">
<property name="cd" ref="customerDao"></property>
</bean>
<bean name="customerDao" class="cn.itcast.dao.Impl.CustomerDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<property name="cd" ref="customerDao"></property>
</bean>
<bean name="customerDao" class="cn.itcast.dao.Impl.CustomerDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 将c3p0配置到hibernate属性中 -->
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.connection.dialect">cn.itcast.utils.JacSQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!-- orm映射,指定元数据所在的包,spring会自动读取包所在的位置 -->
<property name="mappingDirectoryLocations" value="classpath:cn/itcast/domain"> </property>
</bean>
<!--读取db.properties文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 配置c3p0连接池 -->
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
对此问题进行记录。后续寻找解决方案。