【问题标题】:spring-data-jdbc update with repository save methods updates ID使用存储库保存方法更新 ID 的 spring-data-jdbc 更新
【发布时间】:2019-07-05 22:10:50
【问题描述】:

为非新实体调用 CrudRepository save() 方法会创建以下 sql:UPDATE card SET id = ?, customer_id = ? ... WHERE id = ?

这会引发异常无法更新身份列“id”

ID由数据库生成

使用的版本:1.0.6.RELEASE & 1.0.9.RELEASE

数据库:mssql

为什么 update 语句试图更新 ID 列,因为它是主键?

实体:

import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;

@Table("card")
public class Card {

    @Id
    private Long id;

    @Column("customer_id")
    private String customerId;
...

存储库:

public interface CardRepository extends CrudRepository<Card, String> {
}

【问题讨论】:

  • 不确定这是否与问题有关,但考虑将您的存储库更改为 CrudRepository&lt;Card, Long&gt; ,因为第二个参数应该是 id 列的类型。
  • @Arnaud 感谢您注意到这一点。不幸的是我没有解决问题

标签: java spring-data-jdbc


【解决方案1】:

这听起来像https://jira.spring.io/browse/DATAJDBC-262,它已在版本1.1.M1 中修复并发布,该开发分支的当前版本是1.1.RC1

切换到该版本应该可以解决问题。

注意:我已经看到了你提到的仅与尚未完全支持的 MS-SqlServer 的异常。

【讨论】:

【解决方案2】:

您似乎没有为ID设置id生成策略。 添加这个并尝试它是否有效。

@GeneratedValue(strategy = GenerationType.AUTO) 

【讨论】:

  • 那是 jpa(hibernate) 重点语句,而不是 spring-data-jdbc 语句
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
  • 2022-12-23
相关资源
最近更新 更多