JPA.EJB3 中的 EJB 2 ReadOnlyBean 等效项是什么?
What is the EJB 2 ReadOnlyBean equivalent in JPA.EJB3?
我正在将 EJB 2.1 项目迁移到 JPA/EJB3。我想摆脱很多 EJB ReadOnlyBeans。
JPA/EJB3 是否旨在以不需要 ReadOnlyBeans 的方式本质上支持 ReadOnlyAccess?
EJB 2:
我在 MSSQLSERVER 中使用 JBOSS 将隔离级别设置为 READ_COMITTED。
当 Txn x 尝试读取被 txn Y 锁定的行时,它将等待直到 txn Y 提交对该行的更改。
对于不需要最新数据的场景,我们使用ReadOnlyBeans来获取数据,无需任何事务。
JPA/EJB3:
我仍然将隔离级别设置为 READ_COMITTED。如果我删除 ReadOnlyBeans,会有什么问题吗?
由于 TransactionSceoped 实体管理器使用不同的实体实例,因此删除 ROBeans 应该没有任何问题,对吗?
谢谢!
如果我没理解错的话,您是在问如何使 JPA
实体不可变。如果是这样,您可以
- 将其所有属性标记为
insertable = false, updatable = false
(使用 @Column
、@JoinColumn
等)
- 使用 vendor-specific 扩展(例如,在 Hibernate 中
@Immutable
,在 EclipseLink 中 @ReadOnly
等)
话虽如此,我认为您描述的用例不需要实体 read-only。如果您在没有任何事务的情况下读取实体,它们在加载后会立即分离,因此不存在意外修改它们的风险(除非您特别 opted-in 扩展持久性上下文)。
我正在将 EJB 2.1 项目迁移到 JPA/EJB3。我想摆脱很多 EJB ReadOnlyBeans。
JPA/EJB3 是否旨在以不需要 ReadOnlyBeans 的方式本质上支持 ReadOnlyAccess?
EJB 2: 我在 MSSQLSERVER 中使用 JBOSS 将隔离级别设置为 READ_COMITTED。 当 Txn x 尝试读取被 txn Y 锁定的行时,它将等待直到 txn Y 提交对该行的更改。 对于不需要最新数据的场景,我们使用ReadOnlyBeans来获取数据,无需任何事务。
JPA/EJB3: 我仍然将隔离级别设置为 READ_COMITTED。如果我删除 ReadOnlyBeans,会有什么问题吗?
由于 TransactionSceoped 实体管理器使用不同的实体实例,因此删除 ROBeans 应该没有任何问题,对吗?
谢谢!
如果我没理解错的话,您是在问如何使 JPA
实体不可变。如果是这样,您可以
- 将其所有属性标记为
insertable = false, updatable = false
(使用@Column
、@JoinColumn
等) - 使用 vendor-specific 扩展(例如,在 Hibernate 中
@Immutable
,在 EclipseLink 中@ReadOnly
等)
话虽如此,我认为您描述的用例不需要实体 read-only。如果您在没有任何事务的情况下读取实体,它们在加载后会立即分离,因此不存在意外修改它们的风险(除非您特别 opted-in 扩展持久性上下文)。