我刚刚使用org.apache.openjpa.persistence.meta.AnnotationProcessor6
为我的JPA2实体生成MetaModel。
@javax.annotation.Generated
(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",
date="Tue Nov 22 09:49:03 CET 2011")
public class Entity_ {
public static volatile SingularAttribute<Entity,Entity> id;
public static volatile SingularAttribute<Entity,String> value;
public static volatile SingularAttribute<Entity,String> order;
}
有人可以解释为什么在这种情况下属性被标记为volatile?
感谢。
答案 0 :(得分:7)
设置静态变量的线程可能与用于访问它们的线程不同,因此需要volatile
修饰符来同步所有线程之间的内存。
没有volatile
的方案是这样的:
null
null
。答案 1 :(得分:2)
尽管有meaning of volatile
keyword和Ingo的回答,但值得注意的是每个JPA生成器都需要生成易失性元数据字段(JPA 2.0 FR, 6.2.1.1 Canonical Metamodel )。
在第199页上,您可以阅读:
对于声明的每个持久的非集合值属性y 类X,其中y的类型是Y,元模型类必须包含一个 声明如下:
public static volatile SingularAttribute<X, Y>
ÿ;