java - 为什么我的查询找不到我传递的值?
问题描述
我正在尝试在春季进行自己的查询以删除数据库中的某些内容。我将一些值传递给它@Param
,java 执行查询但使用 ? 而不是像这样的实际值:
Hibernate: DELETE FROM game_like WHERE player_id=? AND game_id=?
询问:
@Modifying
@Transactional
@Query(value = "DELETE FROM game_like WHERE player_id=:#{#playerId} AND game_id=:#{#gameId}", nativeQuery = true)
void deleteReference(@Param("playerId") Long player, @Param("gameId") Long game);
我尝试了不同的方法,但没有任何效果,我不明白为什么会这样。有人可以澄清吗?
编辑:
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinTable(name = "game_like", joinColumns = @JoinColumn(name = "player_id"), inverseJoinColumns = @JoinColumn(name = "game_id"))
private List<Game> games = new ArrayList<>();
解决方案
为了在查询中使用参数,您可以在存储库类中将其定义如下:
@Query("DELETE FROM game_like WHERE player_id=?1 AND game_id=?2")
void deleteReference(Long player_id, Long game_id);
如您所见,您不必使用@Param
. 您只需要在查询中使用参数的位置。
推荐阅读
- swift - 在swift 4中找到数组中所有元素的总和
- web-services - 使用wiremock模拟肥皂网络服务
- c - 如何为二维数组的 qsort 编写比较器函数?
- html - 如何修复 Internet Explorer 11 中的 FlexBox 问题?
- regex - 包含任何字母的正则表达式括号
- sql - 在 SQL Server 2016 中向 json 字符串添加新值
- winforms - .NetCore 2 使用 .Net Framework 程序集
- c# - 将动态对象转换为 IEnumerable 问题
- python - 在 Altair 中将编码重置回 null
- python - 我无法理解 python 中的星号表达式