Jakarta ee 为什么JPA2.0生成的元模型使字段不稳定?

Jakarta ee 为什么JPA2.0生成的元模型使字段不稳定?,jakarta-ee,jpa-2.0,volatile,metamodel,Jakarta Ee,Jpa 2.0,Volatile,Metamodel,类型安全查询的新特性为类生成了一个元模型,但是为什么这些字段不是final而不是volatile呢 public static volatile SingularAttribute<Presentation, String> topic; 公共静态属性主题; 元模型类中的字段不能是final,因为应分配静态final字段: 连同声明或 在静态初始化器中 这是无法做到的,因为创建元模型类的人不知道应该分配的值。创建EntityManagerFactory时,提供程序会分配值 结果是属

类型安全查询的新特性为类生成了一个元模型,但是为什么这些字段不是final而不是volatile呢

public static volatile SingularAttribute<Presentation, String> topic;
公共静态属性主题;

元模型类中的字段不能是final,因为应分配静态final字段:

  • 连同声明或
  • 在静态初始化器中
  • 这是无法做到的,因为创建元模型类的人不知道应该分配的值。创建EntityManagerFactory时,提供程序会分配值


    结果是属性必须是可变的,以保证其他线程可以看到提供者分配的值。

    元模型类中的字段不能是final,因为应该分配静态final字段:

  • 连同声明或
  • 在静态初始化器中
  • 这是无法做到的,因为创建元模型类的人不知道应该分配的值。创建EntityManagerFactory时,提供程序会分配值


    结果是属性必须是volatile的,以保证其他线程可以看到提供者分配的值。

    我对volatile不太了解。但是为什么字段需要一个特定的值呢?为什么他们不能给它分配一个SingularAttribute的随机实现呢。例如,新的SingularAttributeImpl();在生成阶段。条件查询只需要知道类型(SingularAttribute、CollectionAttribute等)和泛型参数。这是因为提供程序的内部工作方式吗?现在我更好地了解了SingularAttribute的API,我可以看到提供程序稍后将设置的一些附加数据。因此,生成工具有点笨,它不处理注释/xml来提供所需的所有信息。它委托提供者稍后再做(因此基本上不是静态的:P)。谢谢。我对volatile不太了解。但是为什么字段需要一个特定的值呢?为什么他们不能给它分配一个SingularAttribute的随机实现呢。例如,新的SingularAttributeImpl();在生成阶段。条件查询只需要知道类型(SingularAttribute、CollectionAttribute等)和泛型参数。这是因为提供程序的内部工作方式吗?现在我更好地了解了SingularAttribute的API,我可以看到提供程序稍后将设置的一些附加数据。因此,生成工具有点笨,它不处理注释/xml来提供所需的所有信息。它委托提供者稍后再做(因此基本上不是静态的:P)。谢谢