我有一個包資訊類,它用于在 Java 6/7 中編譯。但在 Java 8 中,我得到編譯錯誤:
*****錯誤:注解型別不適用于這種宣告@NamedNativeQueries({
錯誤:注解型別不適用于這種宣告@SqlResultSetMappings({*****
這是代碼:
@NamedNativeQueries({
@NamedNativeQuery(name = "",
query = "",
resultSetMapping = "mapping"
),
NamedNativeQuery(
name = "",
query = "",
callable = true,
readOnly = false,
resultSetMapping = ""
)
})
@SqlResultSetMappings({
})
package abc.domain;
import javax.persistence.ColumnResult;
import javax.persistence.EntityResult;
import javax.persistence.FieldResult;
import javax.persistence.NamedNativeQueries;
import javax.persistence.NamedNativeQuery;
import javax.persistence.SqlResultSetMapping;
import javax.persistence.SqlResultSetMappings;
在此先感謝您的幫助
uj5u.com熱心網友回復:
編輯:其他評論更清楚地說明了這里出了什么問題;因此,這個答案的性質發生了一些變化。
聽起來您從 Hibernate 自己的@NamedNativeQueriesand company 版本(可以粘貼在包上)切換到通用 javax 持久性變體,不能放在包上。
在嘗試轉換此代碼時,您必須洗掉并重新生成匯入。不要那樣做 - 洗掉所有這些匯入并用import org.hibernate.annotations.NamedNativeQueries和朋友替換它們。
對于后代,原始答案仍然有效,但僅在特定于javax.persistence.NamedNativeQueries.
你一定是記錯了;它沒有也從來沒有在 java7 上作業過(那是 java7 的檔案amedNativeQueries——注意它是如何有一個@Target(value=TYPE)標記的,所以它不能放在一個包上,這是檔案的 v7 版本!)
你把這些東西放在一個型別上,例如頂級型別。這意味著注釋出現在頂部附近,但在 package 陳述句之后。鑒于您在package-info.java檔案中使用它們,它們根本不能出現在這里(而且永遠不可能)。
SqlResultSetMappings是一樣的。
javac7以某種方式實際上沒有檢查Target這些注釋的條件的可能性很小。然而,這僅僅意味著你的代碼永遠不會作業,即使它確實編譯過。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/510026.html
