uniqueResult在hibernate 5.2.2中是否已被弃用?我该怎么办?

时间:2016-11-08 06:56:39

标签: spring hibernate

嗨,大家好,我是hibernate的新手。我用struts + spring + hibernate编写代码,我在这段代码中遇到了麻烦

import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.integration.entity.User;
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
@Override
public User getUser(String name) {
    // TODO Auto-generated method stub
    String hsql="from User u where u.name='"+name+"'";
    User result=(User)((Query) this.getHibernateTemplate().find(hsql)).uniqueResult();
    return result;
}

问题是Query和uniqueResult()已被弃用,我将如何修改我的代码?感谢

1 个答案:

答案 0 :(得分:1)

问题不仅在于你的方法。孔类HibernateDaoSupport已弃用,因为它说here

我建议你通过Spring配置你的SessionFactory(因为我看到你使用它)并使用createQuery方法传递你的hql。这是一个例子:

配置会话工厂:

<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"
      p:packagesToScan="-your-model-"
      p:hibernateProperties-ref="-your-properties-"
      p:dataSource-ref="-your-datasource-"/>

DAO方法:

private final SessionFactory sessionFactory;

// Injecting session factory via constructor
@Autowired
public UserDAO(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}

String hql="from User u where u.name=:name";

public User getByUsername(String name) {
    return sessionFactory.getCurrentSession()
            .createQuery(hql, User.class)
            .setParameter("name", name)
            .uniqueResult();
}

您的代码也不安全。您应该使用查询参数来阻止sql注入。我用我的方法展示它。阅读会话工厂并将其注入DAO。

祝你好运。

修改

这只是一个例子。您可以根据需要配置所有内容(通过java代码,而不是xml)