1

私のプロジェクトでは、Hibernate のセッションを以下の方法で使用し、エンティティ オブジェクトをtransactionに保存します。

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();

これは正しい方法ですか?? トランザクションは引き続き管理されますか?? セッションから接続オブジェクトを取得すると、トランザクションで管理できません????

この方法を使用する上で問題があるかどうか教えてください??? ありがとう

4

1 に答える 1

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();

参照:

于 2012-10-19T07:37:20.390 に答える