我使用JSON_REMOVE方法从JSON数组列中删除一个字段。下面是我在JPA中写的查询-
@Modifying
@Transactional
@Query("UPDATE Data d SET d.month = JSON_REMOVE(d.month, '$[0].revenue') "
+ " WHERE d.year = :year ")
void resetRevenue(Integer year);
上面的查询起作用了。但是现在我想动态地传递索引值,就像-
@Modifying
@Transactional
@Query("UPDATE Data d SET d.month = JSON_REMOVE(d.month, '$[ :index ].revenue') "
+ " WHERE d.year = :year ")
void resetRevenue(Integer index, Integer year);
当我尝试上面我得到错误-java.sql.SQLSyntaxErrorException: Invalid JSON path expression. The error is around character position 3.
我甚至试着在下面查询-
@Modifying
@Transactional
@Query("UPDATE Data d SET d.month = JSON_REMOVE(d.month, '$[ ?1 ].revenue') "
+ " WHERE d.year = ?2 ")
void resetRevenue(Integer index, Integer year);
但出现错误-org.springframework.dao.InvalidDataAccessResourceUsageException: Ordinal parameter not bound : 2
1条答案
按热度按时间92vpleto1#
您面临的问题是JPA不直接支持JSON路径表达式的参数绑定。要解决这个问题,可以使用本机SQL语法动态构造查询。下面是一个例子:
在这种方法中,使用CONCAT函数动态构造JSON路径表达式。确保包含
@Param
注解,以将方法参数Map到查询中的命名参数。通过使用此方法,您应该能够动态传递索引值并从JSON数组列中删除指定的字段。