Spring3,Hibernate;我该如何使用HibernateTemplate

时间:2011-04-01 01:56:24

标签: java mysql hibernate spring-mvc

我正在尝试更改以下代码以使用: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();
}

5 个答案:

答案 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中注入hibernateTemplatesessionFactory,这样您就可以获得DAOImpl类的受保护方法,这样就可以得到hibernateTemplate这样的getHibernateTemplate() { {1}}和您可以调用的条件方法getSession().createCriteria();

答案 4 :(得分:0)

你初始化了sessionFactory吗?如果正确初始化sessionFactory,那么使你的类(包含上述方法)扩展HibernateDAOSupport类,它具有getHibernateTemplate()方法。