Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不可重复@NamedQuery_Java_Hibernate - Fatal编程技术网

Java 不可重复@NamedQuery

Java 不可重复@NamedQuery,java,hibernate,Java,Hibernate,我想定义以下几个命名查询: @Entity @Table(name = "TableA") @NamedQuery(query = "SELECT i FROM TableA i WHERE i.Id = :Id", name = "findAById") @NamedQuery(query = "SELECT i FROM TableA i WHERE i.name = :name", name = "findAByName") public class TableA { @

我想定义以下几个命名查询:

@Entity
@Table(name = "TableA")
@NamedQuery(query = "SELECT i FROM TableA i WHERE i.Id = :Id", name = "findAById")
@NamedQuery(query = "SELECT i FROM TableA i WHERE i.name = :name", name = "findAByName")
public class TableA  
{   
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private Long id;

    @Column(name="Name")
    String name = "";

\\... more code


}
但是这样做,我在eclipse中得到以下错误消息:

不可重复类型@NamedQuery的重复注释。只有 标记为@Repeatable的注释类型可以一次使用多次 目标

在汇编时:

java.lang.annotation.AnnotationFormatError:的注释重复 类:接口javax.persistence.NamedQuery: @javax.persistence.NamedQuery(lockMode=NONE,hints=[],query=SELECT i 从表A i,其中i.name=:name, name=findAByName)位于 sun.reflect.annotation.AnnotationParser.parseAnnotations2(未知 (来源)


对我来说,每个类只有一个命名查询的限制没有多大意义。这是一个bug还是一个特性?是否存在为每个类定义更多命名查询的变通方法?

嘿,您需要定义如下:

@NamedQueries({
     @NamedQuery(query = "SELECT i FROM TableA i WHERE i.Id = :Id", name = "findAById"),
     @NamedQuery(query = "SELECT i FROM TableA i WHERE i.name = :name", name = "findAByName")
})
使用以下工具:-

@NamedQueries( 
  value={
     @NamedQuery(name = "findAById", query = "SELECT i FROM TableA i WHERE i.Id = :Id"),
     @NamedQuery(name = "findAByName", query = "SELECT i FROM TableA i WHERE i.name = :name")
  }
)

谢谢很好用!这是一个有点老的问题,但可能会帮助其他人,现在JPA2.2已经可以使用了,不需要使用NamedQuery作为多个NamedQuery的容器注释,您只需使用上面的代码,编译器不会给您任何错误。