java.lang.IllegalArgumentException:修改查询只能使用void或int / Integer作为返回类型!同时尝试在JpaRepository中使用@Query

时间:2017-09-22 08:10:48

标签: java mysql spring hibernate spring-data-jpa

我需要更新mysql表中的字符串值。为此我写了一个方法如下。

@Repository
public interface NotificationRepository extends JpaRepository<Notification, Long> {

    @Modifying
    @Query("update Notification msg set msg.message = ?1 where msg.applicationUser.id = ?2")
    String createNewNotification(String message, Long id);

}

我得到以下例外。

java.lang.IllegalArgumentException: Modifying queries can only use void or int/Integer as return type!

无法更新表格中的字符串值。只有void或int是可能的吗?这是什么意思?我该如何处理此异常?请帮忙。

2 个答案:

答案 0 :(得分:5)

由于错误显示Modifying queries can only use void or int/Integer as return type,您只能返回void或整数/ int,表示查询已更新了多少行。

改变它,应该没有问题。

  @Modifying
    @Query("update Notification msg set msg.message = ?1 where msg.applicationUser.id = ?2")
    void createNewNotification(String message, Long id);

答案 1 :(得分:3)

您可以更新数据库中的字符串值(您已经通过消息参数值执行此操作)。在使用@Modifying批注时,不能将String对象作为数据库查询的返回值返回。我建议你将返回类型更改为void或int以指示失败成功:

Sub Test_Date()
    Dim d As Date
    d = "22-09-2017"
    d = DateSerial(Year(d), Month(d) - 1, 21)
End Sub

@Modifying
@Query("update Notification msg set msg.message = ?1 where msg.applicationUser.id = ?2")
void createNewNotification(String message, Long id);

int / Integer返回值是数据库中更新的行数。所以,如果这是> 0您的反馈表明您的查询已成功执行。

还要看一下@Modifying的选项。