使用IN子句更新JPQL中的用户实体字段

时间:2018-11-15 07:10:32

标签: java hibernate jpql

我有一个班级用户,需要更新 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)]

有没有办法解决这个问题?

1 个答案:

答案 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并作为参数传递。