![](/img/trans.png)
[英]Using CrudRepository.save(Entity) to insert an Entity with predefined @ID field using 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.