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 扩展持久性上下文)。