我在Entity中创建了简单的@NamedQuery:
@NamedQueries({
@NamedQuery(name = ProductChangeLog.GetByDate, query = "From ProductChangeLog where date = :date ")
})
日期是Date.sql
我想执行此查询:
List<ProductChangeLog> productChangeLogs = session.getNamedQuery(ProductChangeLog.GetByDate)
.setString("date", date)
.list();
我的问题是,这个@NamedQuery会产生查询:
Hibernate: select productcha0_.id as id21_, productcha0_.availible as availible21_, productcha0_.category as category21_, productcha0_.date as date21_, productcha0_.description as descript5_21_, productcha0_.name as name21_, productcha0_.partnerId as partnerId21_, productcha0_.price as price21_, productcha0_.producent as producent21_, productcha0_.productId as productId21_, productcha0_.productUrl as productUrl21_, productcha0_.status as status21_ from ProductChangeLog productcha0_ where productcha0_.date=2014-01-20
这个查询错了,cose date应该在“”中,如下所示:productcha0_.date =“2014-01-20”
我该怎么办?
我试过
.setDate("date", date)
.setParameter("date", date)
并且它不起作用。
答案 0 :(得分:1)
ProductChangeLog pojo中的日期字段是否使用正确的Temporal注释?
“在普通Java API中,未定义时间的时间精度。在处理时态数据时,您可能希望描述数据库中的预期精度。时态数据可以具有DATE,TIME或TIMESTAMP精度(即实际日期) ,只有时间,或两者兼而有之。)使用@Temporal注释来微调它。“
@Temporal(TemporalType.TIMESTAMP)
@Temporal(TemporalType.DATE)
@Temporal(TemportalType.TIME)
答案 1 :(得分:0)
如果您=
运算符,parameter date
必须与DB的日期格式相同,则完全相同。我认为,在=
或JPQL
中使用hql
运算符作为日期参数的风险就像。
我建议您使用>
或<
或BETWEEN
运算符。
WHERE Adate > Bdate => Adate is before Bdate
WHERE Adate < Bdate => Adate is after Bdate
WHERE Cdate BETWEEN Adate AND Bdate => Cdate is between Adate and Bdate
答案 2 :(得分:-1)
你需要在&#34;:&#34;之间没有空格。和&#34; =&#34;。所以应该阅读
@NamedQueries({
@NamedQuery(name = ProductChangeLog.GetByDate, query = "From ProductChangeLog where date =:date ")
})