spring-data-jpa Spring Data JPA中具有Map值的命名查询

tsm1rwdh  于 2022-11-10  发布在  Spring
关注(0)|答案(2)|浏览(254)

我有一个散列表,它具有键值对,例如:

testMap = new HashMap(){{
                        put(iD, sID);
                        put(lEVEL, sLevel);
                        put(tYPE, sType);
                        put(vALUE, sValue);

现在我有了实体类,其中包含如下字段

@Column(name = "ID")
private String id;

@Column(name = "LEVEL")
private String level;

@Column(name = "PROGRAM")
private String program;

@Column(name = "TYPE")
private String type;

@Column(name = "VALUE")
private String value;

@Column(name = "STARTDATE")
private Date start;

现在我需要创建一个命名查询,其中每一列的值都必须从map键值对中提取出来(类似于:tesMap.get(iD)和ID列中的设置),同时将开始日期与当前日期进行比较,并在startdate列中设置最大日期。

@Query(value = "SELECT * FROM OVERRIDES s " +
            "WHERE s.ID =?1 AND s.LEVEL=?2 AND s.TYPE=?3 AND s.VALUE=?4", nativeQuery = true)

此外,无法决定如何比较此选择查询中的日期。

vwoqyblh

vwoqyblh1#

Date.after()方法可以很容易地比较日期。
例如:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse("2022-07-01");
Date date2 = sdf.parse("2022-08-31");

if(date1.after(date2)) {
    //set largest date in date column
}

至于剩下的问题,请提供整个实体,或者更多关于查询的信息

guicsvcw

guicsvcw2#

在SQL中,您可以使用关系运算符><>=<=来比较日期/时间戳,即

@Query(value = "SELECT * FROM OVERRIDES s " +
        "WHERE s.ID =?1 AND s.LEVEL=?2 AND s.TYPE=?3 AND s.VALUE>=?4", nativeQuery = true)

相关问题