[英]Spring3, Hibernate, MySQL - How do I add transactions control?
[英]Spring3, Hibernate; how do I use HibernateTemplate
我正在尝试更改以下代码以使用:HibernateTemplate,但无法正常工作
public List<Friend> listFriends(String rUser)
{
hibernateTemplate = new HibernateTemplate(sessionFactory);
Friend friend = new Friend();
friend.setUsername(rUser);
// This is the old code that worked!
return (List<Friend>) sessionFactory.getCurrentSession()
.createCriteria(Friend.class)
.add(Example.create(friend))
.list();
// This IS THE NEW CODE THAT I CANT GET TO BUILD?
return (List<Friend>) hibernateTemplate.createCriteria(Friend.class)
.add(Example.create(friend))
.list();
}
Friend friend = new Friend();
friend.setUsername(rUser);
return (List<Friend>) hibernateTemplate.findByCriteria(
DetachedCriteria.forClass(Friend.class)
.add(Example.create(friend)));
要么
Friend friend = new Friend();
friend.setUsername(rUser);
return (List<Friend>) hibernateTemplate.findByExample(friend);
要么
return (List<Friend>) hibernateTemplate.findByCriteria(
DetachedCriteria.forClass(Friend.class)
.add(Restrictions.eq("username", rUser)));
我的建议是压缩HibernateDaoSupport
并从xml注入hibernateTemplate
或sessionFactory
,这样您就可以将受保护的方法添加到DAOImpl类中,这样您就可以像这样获得hibernateTemplate
如getHibernateTemplate()
和可以像这样getSession().createCriteria();
标准方法getSession().createCriteria();
HibernateTemplate
不提供createCriteria()
方法。 我想你需要这个:
return (List<Friend>) hibernateTemplate.findByExample(friend);
也可以看看:
首先,让您的DAO类扩展HIbernateDAOSupport,以便您拥有getHibernateTemplate()方法。
然后使用:
getHibernateTemplate().executeFind(new HibernateCallback() {
Object doInHibernate(Session session) {
return session.createCriteria(Friend.class)
.add(Example.create(friend))
.list();
}
});
当您在DAO类上调用setSessionFactory()时,将创建模板(将其添加为要注入的spring依赖项)。
然后,模板将调用提供的回调的doInHibernate(),传入会话(将从会话工厂中获取)。
您初始化了sessionFactory吗? 如果正确初始化了sessionFactory,那么使您的类与上面的方法保持一致,可以扩展具有getHibernateTemplate()方法的HibernateDAOSupport类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.