java - 主键冲突 Java Spring Boot SQL Server
问题描述
在我的项目中,我有 Events 实体和 MyLocation 实体。
MyLocation id 是 event.eventStartTime (ISOString) + event.eventName,当我尝试更新事件名称时遇到问题(不再与 MyLocation 字符串名称相关),这是错误:
Violation of PRIMARY KEY constraint 'PK__my_locat__72E12F1A88A314B4'. Cannot insert duplicate key in object 'dbo.my_location'. The duplicate key value is (2020-06-25T14:00:01.235ZWeddingT&Z).
这是代码:
@Entity
@Table(name = "Events")
public class Event {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long eventID;
@Column(nullable = false)
private String eventName;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private MyLocation eventLocation;
@column
private TimeStamp eventStartTime;
....
@Entity
public class MyLocation {
@Id
private String name;
@Column
private double longitude;
@Column
private double latitude;
.....
问题是否与 MyLocation 中的 @Id 有关?或任何其他解决方案?
解决方案
似乎您正在尝试重复输入 MyLocation。您是如何生成位置名称的,或者您是否对唯一的位置名称有足够的检查逻辑?
您也可能有一些其他类型作为事件表的主键。像uuid。
@Id
@GeneratedValue(generator = “UUID”)
@GenericGenerator(
name = “UUID”,
strategy = “org.hibernate.id.UUIDGenerator”,
)
@Column(name = “id”, updatable = false, nullable = false)
private UUID id;
或者你可以有一个自动递增的 id:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
推荐阅读
- c++ - SDL2 鼠标相对于视口的位置
- amazon-dynamodb - addAll 如何与模拟分页查询一起使用
- docker - 使用 docker 角色时出错
- excel - 如何使用公式匹配 Excel 中不同表格中的多个条件?
- python - 导入谷歌日历 API 在 IDE 中不起作用,但在控制面板中起作用
- python - sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query')
- c# - 如何将 Join 与聚合函数和 group by 结合使用
- c++ - 未在范围内声明的类对象
- django - 根据用户创建在 Heroku 上自动部署应用
- android - 将数据从活动 A 发送到选项卡式活动 B 的片段之一