检查有关 ListAttribute 的 JPA 元模型代码生成操作的行为更改

此规则会标记 persistence.xml 文件以警告用户 OpenJPA 中有关使用 ListAttribute 来生成的代码中的行为更改。

如果要迁移的应用程序未在使用 JPA 2.0 规范,那么您将不会遇到此问题。 如果应用程序未在使用 JPA 2.0 规范中的条件 API 或元模型 API,那么您将不会遇到此问题。

可能受此更改影响的应用程序类型,是直接利用安全类型 JPA 条件 API 接口或 JPA 元模型 API 接口的那些应用程序。 请注意,此元模型 API 是作为 JPA 2.0 规范的一部分引进。 有两个版本的 WebSphere 所包含的 JPA 2.0 规范会出现如前所述的问题。 这两个版本是:

WebSphere V8.5 会利用并随附 OpenJPA 2.2.0。 在前发行版(请参阅先前段落)中,OpenJPA 的元模型实现会为每个数组生成一个 ListAttribute。 如果数组存储为 PersistentCollection,但对于未注释的数组(例如 byte[]、char[])不正确,那么此行为是正确的。在 OpenJPA 2.2.0 中,已更正此行为,因此未存储为 PersistentCollection 的数组将使用 SingularAttribute 而不是 ListAttribute。

要保持向后兼容性,可以在 persistence.xml 文件中设置属性和值。 具体而言,要使用尚未重新生成的代码 ,您可以设置 persistence.xml 文件中的 <property name="openjpa.Compatibility" value="UseListAttributeForArrays=true"/>。 如果应用程序环境重新生成元模型代码,那么您将不会遇到此问题,并且您不需要使用此属性。 新重新生成的代码将具有正确的声明。 但是,如果应用程序没有重新生成元模型代码(进行二进制迁移时可能会发生这种情况),那么您可以使用此属性来允许将原先生成的代码与新运行时一起使用。

为了帮助保持向后兼容性,将在配置变换期间设置系统属性 UseListAttributeForArrays=true。 但是,如果应用程序已设置用于 OpenJPA 的系统属性,那么将忽略该系统属性。 此规则在设置 UseListAttributeForArrays 系统属性时通知用户将被忽略,因为它无法覆盖现有 openjpa。persistence.xml 文件中的兼容性设置。

下列情况下,此规则将标记 persistence.xml 文件:

此规则的快速修订将修改 openjpa 中的 UseListAttributeForArrays 值。Compatibility 属性,以便值将包含 value="UseListAttributeForArrays=true"

建议的操作为下列其中一个操作。

有关更多信息,请参阅: