首页 > 解决方案 > 为什么我的查询找不到我传递的值?

问题描述

我正在尝试在春季进行自己的查询以删除数据库中的某些内容。我将一些值传递给它@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<>();

标签: javaspringspring-bootjpa

解决方案


为了在查询中使用参数,您可以在存储库类中将其定义如下:

@Query("DELETE FROM game_like WHERE player_id=?1 AND game_id=?2")
void deleteReference(Long player_id, Long game_id);

如您所见,您不必使用@Param. 您只需要在查询中使用参数的位置。


推荐阅读