【问题标题】:How to pass parameter from method to hibernate query如何将参数从方法传递到休眠查询
【发布时间】:2018-05-16 14:42:03
【问题描述】:

我无法将方法参数传递给休眠查询的命名参数,

@Modifying
@Query("update Cinema cin set cin = #{cinema} where cin.id = #{cinema.id}")
    Cinema updateCinema(@Param("cinema") Cinema cinema);

得到以下错误,

 "Caused by: org.hibernate.QueryException: unexpected char: '#' "

我该如何解决?

【问题讨论】:

  • 使用 :cinema insteaf of #{cinema}

标签: hibernate spring-boot hql


【解决方案1】:

在查询注释中,您可以使用:<parameter>(例如:cinema)来引用参数。

看起来您只是想更新一个特定的实体。你有什么理由不简单地使用entityManager.merge(cinema)

由于您使用的是 Spring-boot,因此您可能还使用了 Spring 数据。在这种情况下,cinemaRepsotory.save(cinema) 也应该可以工作。

【讨论】:

  • 那么,查询需要有这个视图吗? @Query("update Cinema cin set cin = :cinema where cin.id = :cinema.id")
  • 如果 id 是您的主键,那么 where 子句将如下所示:where cin = :cinema。我不知道cin = :cinema 是否有效。但是你应该使用 entityManager 进行这种操作。如果您只想使用给定的主键更新实体,则无需自己编写查询。
猜你喜欢
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 2021-12-30
  • 1970-01-01
  • 2016-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多