java - Spring Roo JPA - 为什么手动数据库更新在持久性上下文中自动可用?

标签 java hibernate sql-server-2005 jpa spring-roo

我使用 Spring Roo (Spring MVC 3)、JPA 1、Hibernate、JSTL、JQUERY 等开发了一个 Web 应用程序。持久性上下文是通过 JPA 事务管理器管理的应用程序。使用的数据库是MSSQL2005。该应用程序在 JBOSS 5 上运行。

一切正常。我的问题一直在我的脑海里,但我还没有找到合适的答案。

假设如下:

  1. 我使用entitymanager.find()从表T中检索一些行,并将数据呈现到页面
  2. 我手动更改该行中的一个字段值(通过 SQL 和 GUI 工具)。
  3. 我立即重复步骤 (1),并且手动更新的值可用。

这是正确的吗?我的理解是,持久性上下文中的值不会更新,除非:

  • 调用 em.refesh()
  • 对象在持久上下文中不可用(--> 改为查询数据库)

我的经验似乎与下面的链接相矛盾,这对我来说实际上是合乎逻辑的。

Updated data (in Database) is not visible via JPA/Eclipselink

非常感谢

NaP

最佳答案

这是正确的行为。除非您在 SESSION 中调用 em.refresh(),否则持久性上下文中的值不会更新。 当您再次检索网页时,旧 session 将关闭,新 session 将打开并反射(reflect)新数据。

关于java - Spring Roo JPA - 为什么手动数据库更新在持久性上下文中自动可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12266094/

相关文章:

java - 如何在 Java 中正确处理定时器?

java - 在 hadoop 中使用 Reducer 类

java - Java 中 println() 方法的奇怪行为

java - 如何通过 Java 反射使用方法

java - @Entity 和 @Table 中的名称属性

sql-server-2005 - MSSQL Management Studio 2008 - 数据库图表 - 关键点指向哪个方向?

java - "orphanRemoval = true"删除操作时未删除子对象

java - 多态查询和笛卡尔积

sql - 年和月使用什么类型的数据类型?

sql - 使用 Transact-SQL 在 try catch 中使用 tran 进行 alter then update 时出现问题