gpt4 book ai didi

java - Hibernate开启session两次,需要transaction

转载 作者:行者123 更新时间:2023-11-29 13:57:33 26 4
gpt4 key购买 nike

首先,如果此站点中有与我的问题相关的内容,我想道歉。我找不到任何东西。我正在开发一个链接到用 AngularJS 编写的前端的 spring+hibernate 应用程序。例如,当我从前端调用特定操作时:

@MessageMapping("/markVoicemailAsRead/{uniqueId}")
public void markRead(@DestinationVariable int uniqueId) {
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
voiceMailDao.setVoiceMailRead(uniqueId);
tx.commit();
} catch (HibernateException e) {
if (tx != null)
tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
}

一切都很好,它与我的 postgres 数据库一起正常工作。我发现奇怪的是在 setVoiceMailRead(uniqueId)我不得不打开另一个 session ,我还需要一个事务对象。这是 setVoiceMailRead(uniqueId) 的实现:

    public void setVoiceMailRead(int id) {
Session session = sessionFactory.openSession();
Transaction transaction = null;
Query query = session.createQuery("update VoiceMail set read = :read"
+ " where uniqueId = :id");
try {
transaction = session.beginTransaction();
query.setParameter("read", true);
query.setParameter("id", id);
query.executeUpdate();
transaction.commit();
} catch (HibernateException e) {
if (transaction != null)
transaction.rollback();
e.printStackTrace();
} finally {
session.close();
}
}

如果我在 markRead 操作中删除 session ant 事务,我会在控制台中收到错误“无 Activity 事务”,所以我就这样离开了。我相信我的 hibernate.xml 有问题文件和 <property>标签:

<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQL9Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
</props>
</property>

提前感谢您的回复!

最佳答案

在第一个类中不需要打开 session 对象并提交事务,只需类方法

在您的 markRead(-) 方法中设置 VoiceMailRead(uniqueId)。

关于java - Hibernate开启session两次,需要transaction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28502298/

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