2016-09-09 83 views
1

我想定義命名查詢serveral的一樣:不可重複@NamedQuery

@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 


} 

但這樣做,我得到了日食以下錯誤信息:

Duplicate annotation of non-repeatable type @NamedQuery. Only annotation types marked @Repeatable can be used multiple times at one target.

,並在編譯:

java.lang.annotation.AnnotationFormatError: Duplicate annotation for class: interface javax.persistence.NamedQuery: @javax.persistence.NamedQuery(lockMode=NONE, hints=[], query=SELECT i FROM TableA i WHERE i.name = :name, name=findAByName) at sun.reflect.annotation.AnnotationParser.parseAnnotations2(Unknown Source)

對我來說,這種限制只有一個命名查詢每類沒有太大意義。這是一個錯誤還是一個功能?有沒有解決方法可以爲每個類定義更多的命名查詢?

回答

2

嘿,你需要定義如下:

@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") 
}) 
+0

感謝。效果很好! – BerndGit