gpt4 book ai didi

java - Spring Transaction 尝试在选择查询后触发更新

转载 作者:行者123 更新时间:2023-11-30 04:35:05 26 4
gpt4 key购买 nike

我有一个执行简单选择查询的 DAO 方法:

@Transactional
public List<Object[]> getMyTableData(Long someId)
{
Session session = (Session) getEntityManager().getDelegate();

return session
.createSQLQuery("SELECT * FROM my_table where some_id = :someId")
.addEntity(MyTable.class)
.setParameter("someId", someId)
.list();
}

当我运行它时,我在日志中发现两个查询:

  1. “select * from MyTable where some_id = ...”查询成功获取结果
  2. 之后我在日志中找到了以下内容:

    org.springframework.orm.jpa.JpaTransactionManager:启动事务提交org.springframework.orm.jpa.JpaTransactionManager:在 EntityManager 上提交 JPA 事务 [org.hibernate.ejb.EntityManagerImpl@162add4]org.hibernate.transaction.JDBCTransaction:提交org.hibernate.event.def.AbstractFlushingEventListener:处理刷新时间级联org.hibernate.event.def.AbstractFlushingEventListener:刷新:对 2 个对象进行 0 次插入、1 次更新、0 次删除

然后它会触发另一个查询“Update my_table set ....”

为什么要执行此更新查询?

最佳答案

正如 Pace 上面提到的“在 JPA 中,当事务提交时,JPA 会将任何修改的实体写入数据库”。因此,我尝试将 readOnly = true 添加到 @Transactional 注释中,它解决了问题。

关于java - Spring Transaction 尝试在选择查询后触发更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13703142/

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