注解类型不适用于 Java 8 中包信息类中的此类声明错误



我有一个包信息类,它用于在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;

提前感谢您的帮助

编辑:其他评论更清楚地表明了这里出了什么问题;因此,这个答案的性质发生了一些变化。

听起来你从Hibernate自己的@NamedNativeQueries和公司版本(你可以坚持在包上)切换到通用的javax持久性变体,它不能放在包上。

在尝试转换此代码时,必须已删除并重新生成导入。不要这样做 - 删除所有这些导入并用import org.hibernate.annotations.NamedNativeQueries和朋友替换它们。


对于后代来说,原始答案仍然有效,但仅在专门针对javax.persistence.NamedNativeQueries的上下文中。

你一定记错了;它没有也从来没有在java7上工作过(这是amedNativeQueries的java7文档 - 注意它有一个@Target(value=TYPE)标记,所以它不能放在一个包上,这就是文档的v7版本!

你把这些东西放在一个类型上,例如顶级类型。这意味着注释显示在顶部附近,但在包语句之后。鉴于您在package-info.java文件中使用它们,它们根本无法出现在此处(并且永远不可能)。

SqlResultSetMappings是一样的。

不知何故,javac7实际上并没有检查这些注释的Target条件。但是,这仅意味着您的代码从未工作过,即使它确实进行了编译。

相关内容

  • 没有找到相关文章

最新更新