Hibernate hql和会话管理

时间:2013-01-27 12:54:18

标签: hibernate hql sessionfactory

本周我学会了编程休眠,如果我的方法是正确的,我就不会感到害羞。我阅读了很多文章,每篇hibernate文章看起来都有点不同。我正在使用Hibernate 4,这是从我的数据库获取数据的正确方法吗?它目前正在工作,但如果这是最好的方式,我不是真的:)我错过了什么?是否有更好/更清晰的方法来获取数据?

    @Autowired
private SessionFactory sessionFactory;

public List<UserFigures> getKeyFigure(int userId) {

    Session session = getSessionFactoryDw().openSession();

    String hql = "from Figures " +
                "where UserID = :userId ";

    Query query = session.createQuery(hql);
    query.setParameter("userId", userId);
    List<UserFigures> res = query.list();
    session.close();
    return res;
}

1 个答案:

答案 0 :(得分:2)

您的代码的主要问题是不遵守Java命名约定,缺少事务以及糟糕的会话处理代码。

考虑到你对@Autowired的使用,我想你正在使用Spring。因此,您应该使用Spring会话和事务管理来创建与当前Spring声明性事务绑定的上下文会话(即使用sessionFactory.getCurrentSession()而不是sessionFactory.openSession())。

Spring文档有一个完整的chapter dedicated to Hibernate。阅读它。

此外,Figures应命名为Figure