我目前正在研究正式的JPA 2最终规范。 the following statement是否包含在规范中的任何位置?
实体管理器保证在单个持久性上下文中, 对于任何特定的数据库行,只有一个对象 实例
要么我没有清楚地理解规范,要么我找不到证明所引用的陈述是规范的一部分的部分。
答案 0 :(得分:1)
不,规范没有给出这样的保证。但在我看来,这是隐含的假设。
在实践中,有时相同的表被映射到两个不同的实体。其中一个被视为只读实体。例如,只读实体可用于报告目的,并且优化仅包含其他实体中的字段子集。这可以例如如下:
@Entity
public class EntityA {
@Id private Integer id;
@Lob
byte[] tooHeavyToLoadAlways;
}
@Entity
@Table(name="EntityA")
public class EntityALightWeight {
@Id private Integer id;
}
对于JPA,这两个实体之间没有任何关联,因此请注意,只有第一个实体被修改而第二个实体被刷新是应用程序的责任。因此,应谨慎使用,因为EntityALightWeight可以从数据库刷新,但永远不会包含在同一事务中对EntityA所做的更改。