如何在Spring Data JPA中编写下面的SQL查询?

时间:2018-07-31 06:56:13

标签: java spring-boot spring-data-jpa

audioop.ulaw2lin(fragment, width)

我尝试了以下JPA查询,但结果空了。

SELECT * FROM vnfconfigdetails where vnfid='1234' and (creationdate >= '2018-07-12' and creationdate <= '2018-07-15');

ShowSQL查询-

@Query(value= " SELECT * FROM vnfconfigdetails where (creationdate >= :startDate AND creationdate <= :endDate ) AND vnfid =:vnfid", nativeQuery = true)
List<VnfConfigDetailsDB> findByVnfidAndCreationdate(@Param("vnfid") String vnfid,@Param("startDate") Date startDate, @Param("endDate")Date endDate);

3 个答案:

答案 0 :(得分:0)

这应该有效。

 List<VnfConfigDetailsDB> findByVnfidAndCreationdateBetween(String vnfid, Date startDate, Date endDate)

您不需要@Query。当您说出“之间”时,sping-data将正确制定查询条件。

答案 1 :(得分:0)

在您的情况下,您使用本机查询。这不是JPQL,因此您必须进行一些更改。

  1. 请勿在方法中使用参数的@Param开头:请删除@Param(“ vnfid”),@ Param(“ startDate”)和@Param(“ endDate”)。

  2. 将所有:paramName替换为?。例如,在查询内部将:startDate替换为?NumberOfParam,以此类推:

    @Query(value= " SELECT * FROM vnfconfigdetails where (creationdate >= ?2 AND   creationdate <= ?3 ) AND vnfid =?1", nativeQuery = true)
    List<VnfConfigDetailsDB> findByVnfidAndCreationdate(String vnfid,Date startDate, Date endDate);
    

如果要使用JPQL,则必须删除nativeQuery = true,查询将如下所示:

@Query(value= " SELECT v FROM VnfConfigDetailsDB v where (v.creationdate >= :startDate AND v.creationdate <= :endDate ) AND v.vnfid =:vnfid")
List<VnfConfigDetailsDB> findByVnfidAndCreationdate(@Param("vnfid") String vnfid,@Param("startDate") Date startDate, @Param("endDate")Date endDate);

答案 2 :(得分:0)

删除@Param

@Query(value = "SELECT * FROM vnfconfigdetails where (creationdate >= ?2 AND   creationdate <= ?3 ) AND vnfid =?1", nativeQuery = true)
List<VnfConfigDetailsDB> findByVnfidAndCreationdateBetween(String vnfid, Date startDate, Date endDate);

在实体类中添加时间注释。必须为java.util.Date和java.util.Calendar类型的持久字段或属性指定此批注。只能为这些类型的字段或属性指定。

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "creationdate", columnDefinition = "DATETIME")
private Date creationdate;

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "lastupdated", columnDefinition = "DATETIME")
private Date lastupdated;