- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在查看 Spring Roo 生成的代码,我注意到它创建的 persist()
方法被赋予 Propagation.REQUIRES_NEW
。默认传播是否足够?
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void Entity.persist() {
if (this.entityManager == null) this.entityManager = entityManager();
this.entityManager.persist(this);
}
一些附加信息。这是生成此代码的 roo 日志:
// Spring Roo 1.1.0.RELEASE [rev 793f2b0] log opened at 2011-02-04 10:01:02
project --topLevelPackage org.sotest.sscce --projectName Test --java 6
// Spring Roo 1.1.0.RELEASE [rev 793f2b0] log closed at 2011-02-04 10:01:04
// Spring Roo 1.1.0.RELEASE [rev 793f2b0] log opened at 2011-02-04 10:01:06
persistence setup --database GOOGLE_APP_ENGINE --provider DATANUCLEUS
entity --class ~.entities.Entity
exit
// Spring Roo 1.1.0.RELEASE [rev 793f2b0] log closed at 2011-02-04 10:02:55
我正在使用具有 DN 提供程序的 GAE 数据库。我只是创建了一个实体,除了发出上述 roo 命令外,我没有触及任何文件。当我打开 Entity_Roo_Entity.aj 时,我得到了上面的代码。
我将在最新版本的 Roo 上再次尝试并验证相同的输出。我还将在与 Roo 相关的论坛上发布此问题。
更新:使用 Roo 1.1.1(最新版本)生成相同的代码
最佳答案
第二个答案(在向问题添加额外信息之后)
这可能是由于使用了 GAE。 GAE 数据存储不使用传统的事务语义。参见 GAE 事务隔离的描述 here .具体来说:
Queries and gets inside a transaction are guaranteed to see a single, consistent snapshot of the datastore as of the beginning of the transaction. ... This consistent snapshot view also extends to reads after writes inside transactions. Unlike with most databases, queries and gets inside a datastore transaction do not see the results of previous writes inside that transaction. Specifically, if an entity is modified or deleted within a transaction, a query or get returns the original version of the entity as of the beginning of the transaction, or nothing if the entity did not exist then.
还有restrictions on querying within a transaction .考虑到这一点,可能会添加 REQUIRES_NEW,以便“第一个”事务中实体的任何后续读取都按预期工作。看起来令人困惑且不符合标准,但这也许是在 GAE 的约束下工作时的最佳选择。
第一个答案
There must be a misunderstanding or something else at play. I just checked with Roo v1.1.1 generating a simple entity with Hibernate provider, and the default transaction propagation is used. This is also somewhat verified in the documentation:
All persistence methods are configured with Spring's Transaction support (Propagation.REQUIRED, Isolation.DEFAULT).
使用 Propagation.REQUIRES_NEW 会 对于默认的 persist 没有意义 方法。
我不是 Roo 方面的专家,所以不能 甚至想到任何可能做的事情 这。也许你应该发布更多 你的代码,尤其是任何 非标准配置。随机的 问题/想法:
- 您使用的是 Hibernate 提供程序还是?
- 持久性单元的任何自定义配置?
- 请务必查看所有的 Propagation.REQUIRES_NEW 你的实体坚持方法?
- 您在哪里看到传播注释。 (例如在 *_Entity.aj 文件?)
您的实体类(或其父类之一)是否有可能 有它自己的 .persist 方法(因此 重写 Roo 的生成方法)。
1 : http://static.springsource.org/spring-roo/reference/html/base-persistence.html
1 : 啊。我认为这很可能是由于使用了 GAE/DN 提供商。我会相应地修改我的答案。同时,在此处查看有关 GAE 事务隔离的注释:http://code.google.com/appengine/docs/java/datastore/transactions.html .
关于java - 为什么 Spring Roo 给 persist() Propogation.REQUIRES_NEW,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4868527/
在 Spring-MVC 应用程序中,我尝试使用 validator 。我将注释 @NotEmpty 和 @Email 放在我的实体之一上,当我尝试验证它时,出现此错误: java.lang.NoSu
网络是我硕士学位的最后一门类(class)。我确实有一个关于如何计算非持久、持久和持久流水线的 http 往返时间的问题。 在花了无数小时阅读有关该问题、从其他大学下载笔记甚至搜索 youtube 视
让我们考虑典型的 订购 和 订单商品 例子。假设 订单商品 是 的一部分订购 聚合,只能通过订单添加。所以,添加一个新的 订单商品 到 订购,我们必须通过 Repository 加载整个 Aggreg
// lookup existing user & set a currently null child entity (ContactInfo) user.setContactInfo(contac
我正在尝试关注 this tutorial .我想我不是从使用可下载项目开始,而是从我之前做过的一个简单的“spring MVC - Maven - eclipse”项目开始。这个项目运行良好。 因此
我正在使用打开 Kubernetes 选项的 docker 应用程序运行 mac OSX Catalina。我使用以下 yaml 和命令创建了一个 PersistentVolume。 apiVersi
假设我有一个类 Employee和一个类Company其中包含 Employee 的 LinkedList对象,我想编写一个添加 Employee 的方法到特定的数据库Company 。我创建了一个新
我实际上正在将我们应用程序的所有组件更新到最新版本。因此,除其他外,我将从 eclipselink-2.5.0 升级到 eclipselink-2.7.3,并从 Tomcat 7 升级到 TomEE。
我试图遵循《用GlassFish 3开始Java EE 6平台》一书第2章中的示例。我正在Windows中使用cmd中的EclipseLink,Derby和Maven。我真的不知道这一点,将不胜感激!
我只是看看ClassGuard (虽然我知道一些 objection )。 但是我得到了 javax.persistence.PersistenceException: [PersistenceUni
我的印象是,如果我们使用持久字段,就不需要 getter 方法,因为实体管理器直接引用实例变量。但是,当我从实体中删除 getter 和 setter 方法以具有持久字段时,未从数据库中检索到相应实例
我正在 Eclipse 中使用 Servlet、JPA、EJB 和 JBoss 进行项目。正如您在我的主题标题中看到的,我的 persistence.xml 文件有错误,但我不知道是哪个:
我已经尝试了一个星期或更长时间来让我的状态在 react native Android 应用程序中持续存在,但在重新水化后状态始终具有初始值。如果我使用 Redux devtools 检查 ASync
什么时候应该坚持,什么时候应该补充水分?命名约定非常困惑,因为作者几乎没有提到它们在 redux-persist 的上下文中的含义。 . 最佳答案 在不真正了解图书馆的情况下: persist = 将
我正在尝试按照老师文档中提供的信息设置一个简单的 jpa 2.0 项目。我已经处理这个问题好几个小时了,但无论我做什么,当我尝试创建 EntityManagerFactory 时,我总是遇到这个异常:
我有一个 Maven 项目,我将其转换为现在可与 Maven 一起使用的 JPA 项目。我的persistence.xml如下: My Persistence Unit
我正在使用 Netbeans 6.8 并构建简单的 Maven Web 应用程序项目。 为持久实体创建实体和主文件 [也创建持久单元] 并使用 EclipsLink。 但是当我运行主文件时出现这个错误
我是 Kubernetes 的新手,我很难理解 Kubernetes 中持久存储背后的整个想法。 这就足够了吗,或者我必须创建持久卷,如果我只部署这两个对象而不创建 PV 会发生什么情况? 存储应该在
我正在尝试使用 JPA 为我目前参与的 Java-EE 项目设置持久性,并且我遇到了许多配置问题。目前,我已经在 persistence.xml 中定义了一个 RESOURCE_LOCAL 持久性单元
Akka 持久性查询通过提供一个通用的基于异步流的查询接口(interface)来补充 Persistence,各种日志插件可以实现该接口(interface)以公开它们的查询功能。 这是来自 akk
我是一名优秀的程序员,十分优秀!