gpt4 book ai didi

java - Hibernate getCurrentSession() 我真的需要一个只读类型查询的事务吗?

转载 作者:行者123 更新时间:2023-12-01 13:09:19 25 4
gpt4 key购买 nike

我正在尝试利用 Hibernate,并尝试通过利用 API SessionFactory 提供的 getCurrentSession() 来避免 session 管理。据我了解,这将为我管理 session 。我的问题是,当尝试使用它代替 openSession() 时,我收到一条错误消息,指出我需要有一个 Activity 事务。我在网上读到了相互矛盾的答案,所以我仍然不确定。我正在尝试执行只读查询(基本上是选择),为什么我需要一个事务?

Error message: org.hibernate.HibernateException message: getNamedQuery is not valid without active transaction

更多详细信息:

Hibernate.cfg.xml - 代码片段

<hibernate-configuration>
<session-factory name="hibernateSessionFactory">
<property name="connection.datasource">jdbc/DPARISC</property>
<property name="hibernate.dialect">org.hibernate.dialect.DB2Dialect</property>
<property name="hibernate.current_session_context_class">org.hibernate.context.ThreadLocalSessionContext</property>
<property name="hibernate.connection.isolation">1</property>

我们创建 SessionFactory 的方式没有什么特别的

config.buildSessionFactory();

现在问题就出在 createQuery 上

 Session session = HibernateUtil.getDB2SessionFactory().getCurrentSession();
Query query = session.createQuery(queryStringBuilder.toString())
.setParameter("orgId", request.getOrgId().intValue())
.setParameter("busUnitId", request.getBusinessUnitId().intValue());
query.setMaxResults(HibernateConstants.MAX_RESULTS);

同样,查询基本上只是一个 Select 语句。当我使用 getCurrentSession() 时,我是否需要开始事务,然后提交这样的事情?这不是会造成很大的开销吗?

最佳答案

对您的问题的简短回答:是和否。

更长的答案:

Hibernate 要求您在执行任何操作时都打开一个 session 。仅当您确实打开了一个时才可以使用 getCurrentSession()

您为什么认为它会产生大量开销?

关于java - Hibernate getCurrentSession() 我真的需要一个只读类型查询的事务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23016822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com