此规则会标记 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 文件中设置属性和值。 具体来说,要使用尚未重新生成的代码,可以设置 <property name="openjpa.Compatibility" value="UseListAttributeForArrays=true"/> 在 persistence.xml 文件中。 如果应用程序环境重新生成元模型代码,那么您将不会遇到此问题,并且您不需要使用此属性。 新重新生成的代码将具有正确的声明。 但是,如果应用程序没有重新生成元模型代码(进行二进制迁移时可能会发生这种情况),那么您可以使用此属性来允许将原先生成的代码与新运行时一起使用。
为了帮助保持向后兼容性,将在配置变换期间设置系统属性 UseListAttributeForArrays=true。 但是,如果应用程序已设置用于 OpenJPA 的系统属性,那么将忽略该系统属性。 如果系统因为无法覆盖 persistence.xml 文件中的现有 openjpa.Compatibility 设置而将忽略 UseListAttributeForArrays 系统属性的设置,那么此规则会通知用户。
下列情况下,此规则会标记 persistence.xml 文件:
当该规则的自动修复程序可用时,它将修改 UseListAttributeForArrays 值 openjpa.Compatibility 属性,以便该值将包含 value="UseListAttributeForArrays=true" .
建议的操作为下列其中一个操作。
有关更多信息,请参阅: