此規則會標示 persistence.xml 檔來警告使用者,在 OpenJPA 中有關利用 ListAttribute 產生的程式碼,行為有了改變。
如果您要移轉未使用 JPA 2.0 規格的應用程式,就不會發生這個問題。 如果您的應用程式沒有使用 JPA 2.0 規格中的 Criteria API 或 Metamodel API,就不會發生這個問題。
這個變更所可能影響的應用程式類型,有使用具有類型安全性之 JPA Criteria API 介面的應用程式,或直接使用 JPA Metamodel API 介面的應用程式。 請注意,這個 Metamodel API 是 JPA 2.0 規格所引進。 WebSphere 有兩個版本包含會出現先前所述問題的 JPA 2.0 規格。 它們是:
WebSphere 8.5 版使用並提供 OpenJPA 2.2.0。 在舊版中(請參閱上一段),OpenJPA 的 MetaModel 實作是每個陣列都會產生一個 ListAttribute。 如果陣列儲存為 PersistentCollection,則此行為正確,但對於 未註釋的陣列(例如 byte []、char [])則不正確。在 OpenJPA 2.2.0 中,此行為已更正,因此未儲存為 PersistentCollections 的 陣列將使用 SingularAttribute(而非 ListAttribute)。
如果要維護舊版相容性,您可以在 persistence.xml 檔中設定一個內容和值。 具體而言,若要使用尚未重新產生的程式碼,您可以設定 <property name="openjpa.Compatibility" value="UseListAttributeForArrays=true"/> 在 persistence.xml 檔中。 如果您的應用程式環境會重新產生您的 meta 模型程式碼,就不會發生這個問題,您不需要使用這個內容。 重新產生的程式碼會有適當的宣告。 不過,如果您的應用程式沒有重新產生 meta 模型程式碼(當執行二進位移轉時,就可能如此),您可以利用這個內容,讓舊有產生的程式碼能夠用於新的執行時期。
為了有助於維護舊版相容性,在配置轉換期間,會設定系統內容 UseListAttributeForArrays=true。 不過,如果應用程式已經設定,就會忽略 OpenJPA 的系統內容。 當設定 UseListAttributeForArrays 系統內容會被忽略時,此規則會通知使用者,因為它無法置換 persistence.xml 檔中現有的 openjpa.Compatibility 設定。
在下列情況下,此規則會標示 persistence.xml 檔:
當此規則的自動修復可用時,它將修改 UseListAttributeForArrays 中的值 openjpa.Compatibility 內容,以便值將包含 value="UseListAttributeForArrays=true" .
建議採取下列動作之一。
如需相關資訊,請參閱: