0

我正在尝试按 JPQL 查询声明中的字段进行排序,看起来它应该非常简单,但我不断收到编译器错误。

我正在尝试按 UserClockDate 列排序,该列是 UserTime 行的一部分。但是每次我尝试编译时都会出现错误:

严重:命名查询中的错误:fetchIfUserIsClockedInWithUser org.hibernate.QueryException:无法解析属性: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;

您能给我的任何帮助将不胜感激!

4

2 回答 2

5

您的意思是您尝试按不存在的字段排序?UserClockDate应该是userClockDate

于 2012-08-10T06:57:34.787 回答
2

JPQL 适用于实体、它们的映射列和关联。它不适用于表和列。

实体中没有USER_ID字段。实体中UserTime没有。UserClockDateUserTime

查询应该是

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

旁注:用户时间的所有字段都是用户时间的一部分。无需user到处重复前缀。为什么不命名字段clockIn, clockOut,clockDate呢?

于 2012-08-10T07:02:45.460 回答