2012-08-10 50 views
0

我試圖按JPQL查詢聲明中的字段排序,它看起來應該非常簡單,但我不斷收到編譯器錯誤。不能按JPQL排列ORDERDER BY

我想通過UserClockDate列排序,這是UserTime行的一部分。但每次我嘗試編譯時出現錯誤:

SEVERE: Error in named query: fetchIfUserIsClockedInWithUser org.hibernate.QueryException: could not resolve property: UserClockDate of: models.UserTime [SELECT ut FROM models.UserTime ut WHERE USER_ID = :user ORDER BY ut.UserClockDate DESC]

如果我只拿了ORDER BY它編譯罰款。

這裏的類本身的相關部分:

@NamedQueries({ 
     @NamedQuery(name = "fetchAllUserTimes", query = "SELECT ut FROM UserTime ut"), 
     @NamedQuery(name = "fetchIfUserIsClockedInWithUser", query = "SELECT ut FROM UserTime ut WHERE USER_ID = :user ORDER BY ut.UserClockDate DESC") 
    }) 
@Entity 
@Table(name = "userTime") 
@Component 
public class UserTime implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue 
    @Column(name = "UserTimeId") 
    private int userTimeId; 

    @ManyToOne 
    @JoinColumn(name = "USER_ID") 
    private User user; 

    @Column(name = "UserClockIn") 
    @Type(type="org.joda.time.contrib.hibernate.PersistentDateTime") 
    private DateTime userClockIn; 

    @Column(name = "UserClockOut") 
    @Type(type="org.joda.time.contrib.hibernate.PersistentDateTime") 
    public DateTime userClockOut; 

    @Column(name = "UserClockDate") 
    @Type(type="org.joda.time.contrib.hibernate.PersistentDateTime") 
    public DateTime userClockDate; 

你可以給我任何幫助將不勝感激!

回答

5

你的意思是你試圖按不存在的字段排序? UserClockDate應該是userClockDate

+1

爲了澄清,您應該使用實體中字段的名稱而不是表中列的名稱。 – Eelke 2012-08-10 06:59:51

+0

你是對的!我應該抓住這一點,謝謝!我錯誤地試圖使用列名而不是字段名。 – CorayThan 2012-08-10 07:02:45

2

JPQL適用於實體及其映射列和關聯。它不適用於表格和列。

UserTime實體中沒有USER_ID字段。 UserTime實體中沒有UserClockDate

查詢應該是

select ut from models.UserTime ut where ut.user = :user order by ut.userClockDate desc 

邊注:所有字段OS UserTime是UserTime的一部分。無需在每個地方重複使用user前綴。爲什麼不用clockInclockOutclockDate來代替字段?