当前位置: 首页 > 知识库问答 >
问题:

使用hibernate的session.connection()运行原生sql有什么问题吗

齐成双
2023-03-14

在我的项目中,他们使用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个答案

许俊风
2023-03-14

是的,这里没有问题。

但是,使用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();

另请参见:

    <李>第十八章。本机SQL
 类似资料:
  • 问题内容: 我在这里看到许多帖子说不要使用该变量。我通常不这样做,但有时很方便。它出什么问题了? 问题答案: 但绝对没有错,采取从两个输入,并在组合方式。实际上,这就是您几乎总是想做的: 对于通常通过GET提交的纯幂等请求,您想要的数据量可能无法容纳在URL中,因此实际上已将其更改为POST请求。 对于真正生效的请求,您必须检查它是否由POST方法提交。但是,这样做的方法是显式检查,而不是依靠为G

  • 问题内容: 我们需要能够获得hibernate会话的关联。没有其他连接可用,因为此连接可能与正在运行的事务关联。 如果现在不建议使用session.connection(),我应该怎么做? 问题答案: 现在,您必须使用Work API: 或者,在Java 8+中:

  • 我有以下代码,其中我尝试将范围的字符串表示转换为数字列表。例如,如果输入为“0-0,3-5,7-10”,则预期输出为“0,3,4,5,7,8,9,10”。但是,我在以下位置出错: 它说没有足够的值来解压。我的推理是,应该具有的形式,所以如果我将其拆分为,我应该得到两个值。有什么问题吗?

  • 问题内容: 我简直不敢相信我网站上正在发生的事情。当我添加此行时: 一切正常。如果我不这样做,CSS就会“混乱”,一切都会变得不同,布局也会变得“丑陋”。 这条线如何解决所有问题? 问题答案: 您正在将HTML与XHTML混合使用。 通常,声明用于区分HTMLish语言的版本(在这种情况下为HTML或XHTML)。 不同的标记语言将表现不同。我最喜欢的例子是。在浏览器中查看以下内容: XHTML

  • 我需要在我现有的Spring Boot 1.2.5应用程序中编写一些临时代码来执行一些复杂的SQL查询。所谓复杂,我指的是关于4个不同表的单个查询,我有很多这样的表。我们都决定使用现有的SQL来降低新查询出错的潜在风险,在这种情况下,这是一个很好的方法。 我的应用程序使用JPA / Hibernate并将一些实体映射到表。从我的研究来看,似乎我必须做很多实体映射。 我尝试编写一个类,该类只获取Hi

  • 本文向大家介绍Mybatis 动态 sql 有什么用?执行原理?有哪些动态 sql?相关面试题,主要包含被问及Mybatis 动态 sql 有什么用?执行原理?有哪些动态 sql?时的应答技巧和注意事项,需要的朋友参考一下 Mybatis 动态 sql 可以在 Xml 映射文件内,以标签的形式编写动态 sql,执行原理 是根据表达式的值 完成逻辑判断并动态拼接 sql 的功能。 Mybatis 提