我有了两个日期,的startDate和结束日期的实体类型:基于当前日期+时间为实例查询JPA实体的最佳方式是什么?
import org.joda.time.DateTime;
@Entity
public class Thing {
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime startDate;
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime endtDate;
}
我有一个Spring数据JPA库(扩展CrudRepository)这个实体类型,并在那里我需要一种方法来查询所有Thing S中的“活动”,其中“主动”被定义为
的startDate < =现在< =结束日期
我尝试了JPQL查询这个样子,但它不是产生预期ED导致我们的一些测试:
@Query("select t from Thing t where t.startDate <= CURRENT_TIMESTAMP and t.endDate >= CURRENT_TIMESTAMP")
public Iterable findAllActive();
我也尝试了方法名,会议查询,它不产生我所期望的结果,但它的尴尬:
public Iterable findByStartDateBeforeAndEndDateAfter(DateTime minStartDate, DateTime maxEndDate);
我可以包在我@Service像
public Iterable getActiveThings() {
DateTime now = DateTime.now();
return repository.findByStartDateBeforeAndEndDateAfter(now, now);
}
所以服务接口是干净的,但回购接口是丑陋而笨拙(我的想法是)。
是否有更好的方法来构建这个使用JPA的存储库查询方法,一个更好的基于方法名称的查询或一个显式的JPQL查询?我宁愿不必在代码中手动构建Query对象(现在我甚至没有Repository的具体类,只有一个接口),但如果这是我考虑的最佳方式。
2014-02-18
E-Riz
+0
”CURRENT_TIMESTAMP“的值是多少? –
+0
'CURRENT_TIMESTAMP'是JPQL中的一个内置函数,它返回数据库当前的日期和时间。请参阅http://stackoverflow.com/a/1659088/639520 –
+0
我写了JPQL查询涉及日期比较工作正常,但我使用默认'日期'类型不同于您指定的类型。尝试使用'java.util.Date'来查看'@ Type'是否导致问题。 –