我有一个班级用户,需要更新 loginCount 和 lastLogin 。 有些用户已经登录并更新了数据,所以我想在那里将loginCount更新为1。
我尝试使用JPQL。
我创建了一个查询,其中我将 loginCount 变量= 1 , lastLogin 发送为 currentDate 和< strong> ids 作为所有ID的组合,例如CommaSeparatedString。
@Query("update User u set u.loginCount = :loginCount, u.lastLogin = :lastLogin where u.id IN (:ids)")
void updateUserInitialLoginCount(@Param("loginCount") Long loginCount, @Param("lastLogin") Date lastLogin, @Param("ids") String ids);
我想使用'IN'子句,但是在这里我遇到一个问题,即要使用IN子句,我必须有一个以逗号分隔的字符串,但是我发现的id是Long类型。
ERROR: Parameter value [1,2] did not match expected type [java.lang.Long(n/a)]
有没有办法解决这个问题?
答案 0 :(得分:1)
您需要将long列表作为参数传递给Param,而不是String。
@Query("update User u set u.loginCount = :loginCount, u.lastLogin = :lastLogin where u.id IN (:ids)")
void updateUserInitialLoginCount(@Param("loginCount") Long loginCount, @Param("lastLogin") Date lastLogin, @Param("ids") List<Long> ids);
当您调用此方法时,请创建一个Long数组列表,并在其中添加id并作为参数传递。