hibernate + spring数据中的本机插入查询

Posted

技术标签:

【中文标题】hibernate + spring数据中的本机插入查询【英文标题】:native insert query in hibernate + spring data 【发布时间】:2014-09-10 17:32:48 【问题描述】:

我尝试将以下代码添加到 spring data jpa 存储库:

  @Query("insert into commit_activity_link (commit_id, activity_id) VALUES (?1, ?2)")
  void insertLinkToActivity(long commitId, long activityId);

但一个应用程序无法启动异常:

原因:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:第 1 行第 59 列附近的 VALUES [插入 commit_activity_link (commit_id, activity_id) VALUES (?1, ?2)]

我哪里错了?

【问题讨论】:

【参考方案1】:

使用java对象而不是传递所有参数

@Modifying(clearAutomatically = true)
    @Transactional
    @Query(value = "insert into [xx_schema].[shipment_p] (gpn,qty,hscode,country_of_origin,created_date_time,shipment_id) "
            + "VALUES (:##sp.gpn,:##sp.qty,  :##sp.hscode ,:##sp.countryOfOrigin, :##sp.createdDateTime, :##sp.id )", nativeQuery = true)
    public void saveShipmentPRoducts(@Param("sp") ShipmentProducts sp);

【讨论】:

【参考方案2】:

我必须将nativeQuery = true 添加到@Query

@Query(value = "insert into commit_activity_link (commit_id, activity_id) VALUES (?1, ?2)", nativeQuery = true)

【讨论】:

以上是关于hibernate + spring数据中的本机插入查询的主要内容,如果未能解决你的问题,请参考以下文章

最新的 Spring Data/Hibernate 在本机查询中不支持 java.time.LocalDate?

在 Spring Boot 中向本机查询添加参数会导致“org.hibernate.exception.SQLGrammarException”,

从 JPA/Hibernate 中的视图加载实体

Spring - 当列名与模型中的名称不同时,本机查询与休眠混合

为啥在本机查询 Hibernate 延迟加载的子实体中?

Hibernate 异常后 Hibernate 不回滚本机生成的 ID