2013-02-08 42 views
1

我有這樣的mappedsuperclass:Mappedsuperclass和namedqueries

@MappedSuperclass 
@DiscriminatorColumn(name = "USER_TYPE") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@NamedQueries({ 
     @NamedQuery(name = "selectAllUsers", query = "SELECT u FROM User u"), 
     @NamedQuery(name = "deleteUserByName", query = "DELETE FROM User u WHERE u.userName like :name"), 
     @NamedQuery(name = "getUserByName", query = "SELECT FROM User u WHERE u.userName like :name") }) 
public abstract class User implements Serializable {.... 

我得到「的抽象模式類型 '用戶' 未知」 的namedquery錯誤。我不明白爲什麼...用戶名是正確的?

任何建議將受到歡迎。

回答

2

這是預期的JPA行爲。映射超類不可查詢(請參閱JPA 2.0規範,部分 2.11.2)。如果要製作超類可查詢,請將註釋從@MappedSuperclass更改爲@Entity

+0

好的thx,我讓這個類變成了一個mappedsuperclass,因爲我只想讓這個擴展類保持。然後,我想要檢索它們作爲超類型,並查看使用命名查詢來查找哪些「類型」...... – 2013-02-08 14:01:22

+0

@DarthBlueRay在這種情況下,兩個註釋之間的唯一區別是映射的超類不是可查詢的,而實體是。這對映射沒有任何影響。 JPA中沒有任何工具可以使類可查詢但不能持久化。 – kostja 2013-02-08 14:06:13

+1

此外,映射的超類不能成爲關係的一部分。 – 2013-03-29 13:11:28