[英]How to Write below SQL Query in Spring Data JPA?
SELECT * FROM vnfconfigdetails where vnfid='1234' and (creationdate >= '2018-07-12' and creationdate <= '2018-07-15');
I have try bellow JPA query but empty result coming. 我已经尝试了以下JPA查询,但结果空了。
@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);
ShowSQL Query- ShowSQL查询-
@Entity
@Table(name = "vnfconfigdetails", schema = "testreports")
public class VnfConfigDetailsDB {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private int id;
@Column(name = "vnfid")
private String vnfid;
@Column(name = "vnfversion")
private String vnfversion;
@Column(name = "vnfname")
private String vnfname;
@Column(name = "configinfo")
@Lob
private String configinfo;
@Column(name = "creationdate")
private Date creationdate;
@Column(name = "lastupdated")
private Date lastupdated;
@Column(name = "status")
private String status;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getVnfid() {
return vnfid;
}
public void setVnfid(String vnfid) {
this.vnfid = vnfid;
}
public String getVnfversion() {
return vnfversion;
}
public void setVnfversion(String vnfversion) {
this.vnfversion = vnfversion;
}
public String getVnfname() {
return vnfname;
}
public void setVnfname(String vnfname) {
this.vnfname = vnfname;
}
public String getConfiginfo() {
return configinfo;
}
public void setConfiginfo(String configinfo) {
this.configinfo = configinfo;
}
public Date getCreationdate() {
return creationdate;
}
public void setCreationdate(Date creationdate) {
this.creationdate = creationdate;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Date getLastupdated() {
return lastupdated;
}
public void setLastupdated(Date lastupdated) {
this.lastupdated = lastupdated;
}
}
This should work. 这应该工作。
List<VnfConfigDetailsDB> findByVnfidAndCreationdateBetween(String vnfid, Date startDate, Date endDate)
You don't need @Query
. 您不需要
@Query
。 When you say Between, sping-data will formulate the query correctly. 当您说之间时,sping-data将正确地构成查询。
In your case you use native query. 在您的情况下,您使用本机查询。 This is not JPQL so you have to do some changes.
这不是JPQL,因此您必须进行一些更改。
Do not use @Param infront of parameters in the method: Please remove @Param("vnfid"), @Param("startDate") and @Param("endDate"). 请勿在方法中使用参数的@Param开头:请删除@Param(“ vnfid”),@ Param(“ startDate”)和@Param(“ endDate”)。
Replace all :paramName with ?. 将所有:paramName替换为?。 For example replace :startDate with ?NumberOfParam and so on inside of the query:
例如,在查询内部将: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);
If you want to use JPQL then you have to remove nativeQuery = true and your query will look something like that: 如果要使用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);
Remove @Param 删除@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);
In the entity class add the temporal annotation. 在实体类中添加时间注释。 This annotation must be specified for persistent fields or properties of type java.util.Date and java.util.Calendar.
必须为java.util.Date和java.util.Calendar类型的持久字段或属性指定此批注。 It may only be specified for fields or properties of these types.
只能为这些类型的字段或属性指定。
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "creationdate", columnDefinition = "DATETIME")
private Date creationdate;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "lastupdated", columnDefinition = "DATETIME")
private Date lastupdated;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.