List find(String queryString):根据HQL查询字符串来返回实例集合
示例:this.getHibernateTemplate().find("from bean.User");
List find(String queryString , Object value);
示例:this.getHibernateTemplate().find("from bean.User u where u.name=?", "test");
或模糊查询:this.getHibernateTemplate().find("from bean.User u where u.name like ?", "%test%");
List find(String queryString, Object[] values); Object[] values参数与查询语句的?占位符对应
示例:String hql= "from bean.User u where u.name=? and u.password=?"
this.getHibernateTemplate().find(hql, new String[]{"test", "123"});
findByNamedParam(String queryString , String paramName , Object value)
示例:
String queryString = "select count(*) from bean.User u where u.name=:myName";
String paramName= "myName";
String value= "xiyue";
this.getHibernateTemplate().findByNamedParam(queryString, paramName, value);
findByNamedParam(String queryString , String[] paramName , Object[] values)
示例:values与paramName一一对应
String queryString = "select count(*) from bean.User u where u.name=:myName and u.password=:myPassword";
String[] paramName= new String[]{"myName", "myPassword"};
String[] value= new String[]{"xiyue", "123"};
this.getHibernateTemplate().findByNamedParam(queryString, paramName, value);
List findByNamedQuery(String queryName):根据命名查询返回实例集合,queryName是命名查询的名称,参数value与上面的一样与查询语句的?和参数名称一一对应
List findByNamedQuery(String queryName, Object value)
List findByNamedQuery(String queryName, Object[] value)
List findByNamedQueryAndNamedParam(String queryName, String paramName, Object value)
List findByNamedQueryAndNamedParam(String queryName, String[] paramName, Object[] value)
Object execute(HibernateCallback action):通过HibernateCallback访问数据库
List executeFind(HibernateCallback action)
可以考虑用标准的Hibernate3的编码方式作为HibernateTemplate的替代,因为Hibernate3提供同的SessionFactory.getCurrentSesion()已经取代了以往的那种每次操作都open一个新的Session的方式,同时Spring的LocalSessionFactoryBean自动支持Hibernate3的getCurrentSession的实录管理,也就是说不用HibernateTemplate而只用Hibernate3我们一样受用Spring的事务管理。
HibernateDaoSupport类
Spring为Hibernate的DAO提供工具类:HibernateDaoSupport。该类主要提供如下两个方法,方便DAO的实现:
public final HibernateTemplate getHibernateTemplate()
public final Session getSession()
public final void setSessionFactory(SessionFactory sessionFactory)
其中,setSessionFactory方法用来接收Spring的ApplicationContext的依赖注入,可接收配置在Spring的SessionFactory实例,getHibernateTemplate方法则用来根据刚才的SessionFactory产生Session,最后生成HibernateTemplate来完成数据库访问。
分页查询:
public List getListForPage(final String hql, final int offset,
final int length) {
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
query.setFirstResult(offset);////offset=(pagenumber-1)*pageSize,offset=0表示第一条记录
query.setMaxResults(length);
List list = query.list();
return list;
}
});
return list;
}
Error creating bean with name ‘transactionManager‘
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
应该写hibernate3,而不是hibernate
WARN:No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:/C:/Program%20Files/Tomcat%205.5/webapps/XFWebs/WEB-INF/lib/ehcache-1.2.4.jar!/ehcache-failsafe.xml 原因:报这个错是因为在/sandh/web-inf/classes下面没有ehcache.xml这个文件!这个文件是hibernate缓存配置文件。
解决方法:从ehcache-1.5.0.jar 中把文件ehcache-failsafe.xml 解压出来改名 ehcache.xml 复制到classes下面就行了!
配置文件解读:
<diskStore>表示当内存缓存中对象数量超过类设置内存缓存数量时,将缓存对象写到硬盘,path="java.io.tmpdir"表示把数据写到这个目录下。Java.io.tmpdir目录在运行时会根据相对路径生成。
<defaultCache>表示设定缓存的默认数据过期策略。
<cache>表示设定用具体的命名缓存的数据过期策略。
name表示具体的缓存命名。
maxElementsInMemory表示cache中最大允许保存的对象数据量。
eternal表示cache中数据是否为常量。
timeToIdleSeconds表示缓存数据钝化时间
timeToLiveSeconds表示缓存数据的生命时间。
overflowToDisk表示内存不足时,是否启用磁盘缓存。
java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
如果是使用MyEclipse创建JavaEE5.0的Web项目, 解决办法:删除对Java EE 5 Libraries的使用。
问题原因:javaee.jar中的部分类与hibernate-jpa-2.0-api-1.0.0.Final.jar存在版本冲突。