我正在尝试更改以下代码以使用: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();
}
答案 0 :(得分:17)
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)));
答案 1 :(得分:1)
HibernateTemplate
未提供createCriteria()
方法。我想你需要这个:
return (List<Friend>) hibernateTemplate.findByExample(friend);
另见:
答案 2 :(得分:1)
首先让你的DAO类扩展HIbernateDAOSupport,以便你拥有getHibernateTemplate()方法。
然后使用:
getHibernateTemplate().executeFind(new HibernateCallback() {
Object doInHibernate(Session session) {
return session.createCriteria(Friend.class)
.add(Example.create(friend))
.list();
}
});
当您在DAO类上调用setSessionFactory()时,会创建模板(将其添加为要注入的弹簧依赖项)。
然后模板将调用提供的回调的doInHibernate(),传入会话(它将从会话工厂获取)
答案 3 :(得分:1)
我的建议是exdens HibernateDaoSupport
并从xml中注入hibernateTemplate
或sessionFactory
,这样您就可以获得DAOImpl类的受保护方法,这样就可以得到hibernateTemplate
这样的getHibernateTemplate()
{ {1}}和您可以调用的条件方法getSession().createCriteria();
答案 4 :(得分:0)
你初始化了sessionFactory吗?如果正确初始化sessionFactory,那么使你的类(包含上述方法)扩展HibernateDAOSupport类,它具有getHibernateTemplate()方法。