簡體   English   中英

帶有存儲庫保存方法更新ID的spring-data-jdbc更新

[英]spring-data-jdbc update with repository save methods updates ID

為不是新實體的實體調用CrudRepository save()方法將創建以下sql: UPDATE card SET id =?,customer_id =? ...哪里id =?

這引發異常無法更新標識列“ id”

ID由數據庫生成

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

DB: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> {
}

這聽起來像https://jira.spring.io/browse/DATAJDBC-262 ,它已在1.1.M1版本中修復並發布,該開發分支的當前版本為1.1.RC1

切換到該版本應該可以解決問題。

注意:我已經看到您只提到了MS-SqlServer的例外情況,但尚未完全支持。

似乎您尚未為ID設置ID生成策略。 添加此內容,然后嘗試是否可行。

@GeneratedValue(strategy = GenerationType.AUTO) 

如果實體的主鍵字段未標記@GeneratedValue,則不會生成自動主鍵值,並且應用程序負責通過初始化主鍵字段來設置主鍵。 必須在嘗試持久化實體對象之前完成該操作。 另外,我認為您需要為Card實體實現Hashcode和Equals。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM