7.11. Jakarta persistence 属性更改
本节介绍 JBoss EAP 7.0 和 7.1 中引入的 Jakarta Persistence 属性更改。
JBoss EAP 7.0 中引入的 Jakarta Persistence 属性更改
添加了一个新的持久性属性 jboss.as.jpa.deferdetach
,以便与之前的 JBoss EAP 版本中的持久性行为兼容。
jboss.as.jpa.deferdetach
属性控制在每个实体 EntityManager
调用后,在非Jakarta 事务性环境中使用的事务范围持久性上下文以及是否等待持久性上下文关闭时(例如,会话 bean 调用结束时)。属性值默认为 false
,即实体在各个 EntityManager
调用后被分离或清除。这是 Jakarta Persistence 规范中定义的正确默认行为。如果属性值设为 true
,则实体在持久性上下文关闭前不会被分离。
在 JBoss EAP 5 中,持久性的行为如同 jboss.as.jpa.deferdetach
属性设为 true
。要在将应用从 JBoss EAP 5 迁移到 JBoss EAP 7 时获得同样的行为,您必须在 persistence.xml
中将 jboss.as.jpa.deferdetach
属性值设置为 true
,如下例所示。
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> <persistence-unit name="EAP5_COMPAT_PU"> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source> <properties> <property name="jboss.as.jpa.deferdetach" value="true" /> </properties> </persistence-unit> </persistence>
在 JBoss EAP 6 中,持久性的行为如同 jboss.as.jpa.deferdetach
属性设为 false
。这与 JBoss EAP 7 中看到的行为相同,因此迁移应用程序时不需要任何更改。
JBoss EAP 7.1 中引入的 Jakarta Persistence 属性更改
在 JBoss EAP 7.0 中,未同步持久性上下文错误检查不严格,因为它应该在以下区域:
-
同步的容器管理的持久性上下文允许使用与 Jakarta 事务关联的未同步扩展持久性上下文。相反,应该已经抛出一个
IllegalStateException
,以防止使用未同步持久性上下文。 - 部署描述符中指定的未同步持久性上下文被视为同步。
另外,JBoss EAP 7.0 中错误地忽略 @PersistenceContext
中的 PersistenceProperty
提示。
这些问题已在 JBoss EAP 7.1 及更高版本中解决和修复。由于这些更新可能会导致应用行为不需要更改,因此 JBoss EAP 7.1 中引入了两个新的持久性单元属性,以提供向后兼容性并保留之前的行为。
属性 | 描述 |
---|---|
| 此属性禁用错误检查。它应该仅用作临时措施,以便在 JBoss EAP 7.0 中工作并在 JBoss EAP 7.1 及更高版本中出现故障时向后兼容。因为此属性可能在以后的发行版本中弃用,因此建议您尽快更正应用程序代码。 |
|
此属性是 |