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的容器注释,您只需使用上面的代码,编译器不会给您任何错误。