JPA/Hibernate在Spring Roo finder方法中生成错误的SQL
我正在开发一个SpringWeb应用程序,其持久性层由SpringRoo生成的JPA实体组成,Hibernate作为持久性提供者,MySql作为底层数据库 在我的实体中,我有一个类检测,在Roo中生成了一个tstamp java.util.Date字段,如下所示:JPA/Hibernate在Spring Roo finder方法中生成错误的SQL,spring,hibernate,jpa,roo,Spring,Hibernate,Jpa,Roo,我正在开发一个SpringWeb应用程序,其持久性层由SpringRoo生成的JPA实体组成,Hibernate作为持久性提供者,MySql作为底层数据库 在我的实体中,我有一个类检测,在Roo中生成了一个tstamp java.util.Date字段,如下所示: entity jpa --class ~.data.Detection ... field date --fieldName tstamp --type java.util.Date ... finder add findDetect
entity jpa --class ~.data.Detection
...
field date --fieldName tstamp --type java.util.Date
...
finder add findDetectionsByTstampBetween
@RequestMapping(value="/detections", method=RequestMethod.GET, params={"from", "to"} )
当然,finder方法是在执行finder list之后选择的
在我的控制器代码中,在我调用的某个点:
List<Detection> detections = Detection.findDetectionsByTstampBetween(from, to).getResultList();
我希望where子句应该包含一个尾随和detection0_u.tstamp我终于找到了这个谜题的答案,事实证明,这个问题与JPA无关 问题在于,对持久性层的调用是通过以下映射插入到Rest服务控制器中的:
@ResponseBody
@RequestMapping(value="/detections", method=RequestMethod.GET, params="from, to" )
public Object getDetectionsInRange(
@RequestParam(required=true) @DateTimeFormat(pattern="yyyy-MM-dd HH:mm") final Date from,
@RequestParam(required=true) @DateTimeFormat(pattern="yyyy-MM-dd HH:mm") final Date to
)
{
...
List<Detection> detections = Detection.findDetectionsByTstampBetween(from, to).getResultList();
...
}
此错误导致控制器方法的另一个版本用于/检测。在第二个版本中,我调用了另一个finder方法,它似乎在Hibernate中生成了错误的SQL
@ResponseBody
@RequestMapping(value="/detections", method=RequestMethod.GET )
public Object getDetections(
@RequestParam(required=false, defaultValue="0") int days,
@RequestParam(required=false, defaultValue="0") int hours,
@RequestParam(required=false, defaultValue="0") int minutes
)
{
...
List<Detection> detections = Detection.findDetectionsByTstampGreaterThanEquals( ... ).getResultList();
...
}
@RequestMapping(value="/detections", method=RequestMethod.GET, params={"from", "to"} )
@ResponseBody
@RequestMapping(value="/detections", method=RequestMethod.GET )
public Object getDetections(
@RequestParam(required=false, defaultValue="0") int days,
@RequestParam(required=false, defaultValue="0") int hours,
@RequestParam(required=false, defaultValue="0") int minutes
)
{
...
List<Detection> detections = Detection.findDetectionsByTstampGreaterThanEquals( ... ).getResultList();
...
}