![](/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.