spring-data-jdbc 使用存储库保存方法更新 ID
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
数据库:毫秒sql
为什么更新语句尝试更新 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> {
}
您似乎没有为ID设置id生成策略。
添加这个并尝试它是否有效。
@GeneratedValue(strategy = GenerationType.AUTO)
这听起来像 https://jira.spring.io/browse/DATAJDBC-262,它已在版本 1.1.M1
中修复并发布,该开发分支的当前版本是 1.1.RC1
。
切换到该版本应该可以解决问题。
注意:我看到您提到的例外情况仅在 MS-SqlServer 中尚未得到完全支持。
为非新实体调用 CrudRepository save() 方法创建以下 sql: UPDATE card SET id = ?, customer_id = ? ... 哪里 id = ?
这引发异常无法更新标识列'id'
ID由数据库生成
使用的版本:1.0.6.RELEASE & 1.0.9.RELEASE
数据库:毫秒sql
为什么更新语句尝试更新 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> {
}
您似乎没有为ID设置id生成策略。 添加这个并尝试它是否有效。
@GeneratedValue(strategy = GenerationType.AUTO)
这听起来像 https://jira.spring.io/browse/DATAJDBC-262,它已在版本 1.1.M1
中修复并发布,该开发分支的当前版本是 1.1.RC1
。
切换到该版本应该可以解决问题。
注意:我看到您提到的例外情况仅在 MS-SqlServer 中尚未得到完全支持。