使用hibernate session.connection()运行本机sql的任何问题

时间:2012-10-19 07:24:26

标签: java hibernate java-ee jdbc

在我的项目中,他们以下面提到的方式使用Hibernate的会话,然后在事务中保存实体对象。

Session session = HibernateUtil.getCurrentSession();
session.beginTransaction();

Employee employee = new Employee() ;

employee.setName("someName") ;
employee.setEmailId ("someId")
employee.setID (100000) ;

session.saveOrUpdate(employee) ;

session.getTransaction().commit();

现在我的功能很少,我决定运行本机SQL。下面是我用来运行本机sql的方式。我想在事务中运行查询,所以我决定以下面的方式编写代码

String query = "select name from master_employee where id=?"

Session session = HibernateUtil.getCurrentSession();
session.beginTransaction();

Connection connection = session.connection();
PreparedStatement psStmt = connection.prepareStatement(query);
psStmt.setInt(1,id) ;

ResultSet resultSet = psStmt.executeQuery();
// here i will take data from this result set
psStmt.close();
resultSet.close() ;

// I am not closing the connection object since am taking it from hibernate session
// rather i commit hibernate's transaction
session.getTransaction().commit();

这是正确的方法吗?交易还会被管理吗?从会话中获取连接对象无法管理到事务????

请告诉我使用这种方式是否有问题???感谢

1 个答案:

答案 0 :(得分:6)

是的,这里没有问题。

但是,使用Session.createSQLQuery()

运行本机查询要容易得多
Session session = HibernateUtil.getCurrentSession(); 
session.beginTransaction(); 

String name = (String) session
    .createSQLQuery("select name from master_employee where id = ?")
    .setInteger(1, id)
    .uniqueResult();

session.getTransaction().commit();

另见: