SQL: select max(substring(b.serialNumber,1,16)) as maxsn from book_book b where b.serialNumber like 'XXXXXXX%' for update 因为Hibernate是与数据库无关的,而SUBSTRING这个特殊函数是用于特殊数据库的。 解决办法:1)命名查询 <sql-query name="com.chineseall.domain.bo.Book.findMaxSNByMask"> <return-scalar column="maxsn" type="string"/> <![CDATA[ select max(substring(b.serialNumber,1,16)) as maxsn from book_book b where b.serialNumber like :mask for update]]> </sql-query> String maxSN = (String) getQueryDelegate() .getNamedQuery(getNamedQueryFullName("findMaxSNByMask")) .setParameter("mask", serialNumberMask.toString() + "%") .uniqueResult(); 2)指定数据库方言public void queryManyToOneFetch(){ String hql="select substring(pesal.Id,2) from Personone pesal"; try { Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); List list = session.createQuery(hql).list(); System.out.println(list.size()); session.flush(); session.clear(); tx.commit(); HibernateUtil.closeSession(); System.out.println("执行成功"); } catch (HibernateException e) { e.printStackTrace(); }}<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> |