EclipseLink提供@ReadOnly注释以指定实体是“只读”。 EclipseLink文档说明了
您不应修改只读实体。这样做可能会破坏EclipseLink缓存。要修改只读实体,必须克隆或序列化。
但是,当应用程序运行时,创建和持久化新实例是什么?我可以理解一个人不应该修改一个实例,因为同一个实例可能与几个客户端共享,所以我们没有通常的隔离级别(这是这种情况吗?)但我没有看到为什么不创建新的原因实例。不幸的是,我无法在文档中找到有关此问题的内容。你能澄清一下吗?
几乎同样的问题是,如果应用程序正在运行,是否允许从持久性上下文中删除和删除实例?
答案 0 :(得分:1)
只读是一种性能特性,它告诉EclipseLink它可以避免对这些实体进行额外的缓存和更改跟踪,因为它们不适用于更新。正如您所暗示的那样,这允许EclipseLink从共享缓存中提供实体版本,而不是从中构建托管实例,因此对其进行修改是不安全的,因此警告。插入只读实例应该没有问题,但是如果使用delete,它可能会导致应用程序出现问题,如果你通过EntityManager找到一个实体但是得到一个异常,说明它在以后的同一个EntityManager /事务中不存在。