我正在尝试按JPQL查询声明中的字段排序,看起来它应该非常简单,但我不断收到编译器错误。
我正在尝试通过UserClockDate列进行排序,该列是UserTime行的一部分。但每次我尝试编译时都会收到错误:
SEVERE:命名查询错误: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;
非常感谢您给我的任何帮助!
答案 0 :(得分:5)
您的意思是您尝试按不存在的字段进行排序? UserClockDate 应该是 userClockDate
答案 1 :(得分:2)
JPQL适用于实体,它们的映射列和关联。它不适用于表和列。
USER_ID
实体中没有UserTime
字段。 UserClockDate
实体中没有UserTime
。
查询应为
select ut from models.UserTime ut where ut.user = :user order by ut.userClockDate desc
旁注:所有字段os UserTime都是UserTime的一部分。无需在任何地方重复user
前缀。为什么不将字段命名为clockIn
,clockOut
,clockDate
?