更短版本的Hibernate查询

时间:2015-08-07 12:19:22

标签: java spring hibernate

我有hibernate查询,例如通过id获取用户:

public User findById(int id){
    SessionFactory sf = HibernateUtil.getSessionFactory();
    Session session = sf.openSession();
    Transaction tx = null;

    User user = null;

    try{
        tx = session.beginTransaction();
        user = (User) session.get(User.class, id);


        session.getTransaction().commit();
    } catch(HibernateException e){
        if(null != tx) tx.rollback();
        System.out.println("HibernateException, transaction will be rollbacked");
    } catch(Exception e){
        e.printStackTrace();
    }
    finally {
        session.close();
    }

    return user;
}

一个查询没问题,但我需要将所有这些代码公开给每个查询。 我只需要单个代码:

user = (User) session.get(User.class, id);

是否可以将其他代码放到另一个类,方法或其他内容中?

更新 的HibernateUtil:

public class HibernateUtil {

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            return new AnnotationConfiguration().configure()
                    .buildSessionFactory();

        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

1 个答案:

答案 0 :(得分:0)

保留一个Hibernate实用程序类是一个很好的做法,它将使用静态方法为我们提供hibernate会话。此外,您可以通过使用一些简单的逻辑阻止在每个查询上创建一个新会话来重用hibernate会话。