【问题标题】:Primary Key Violation Java Spring Boot SQL Server主键冲突 Java Spring Boot SQL Server
【发布时间】:2020-07-01 12:09:01
【问题描述】:

在我的项目中,我有 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 有关? 或任何其他解决方案?

【问题讨论】:

    标签: java sql spring-boot spring-data-jpa sql-update


    【解决方案1】:

    您似乎正在尝试重复输入 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;
    

    【讨论】:

    • 位置名称是时间戳+事件名称作为字符串,所以我真的不知道我的代码有什么问题。当我在事件上使用更新方法时,对事件中的 MyLocation 对象有什么影响?
    • 它是事件实体的一部分。所以每次保存事件时,位置表都会更新。顺便说一句,为什么位置 ID 必须是事件名称 + 时间戳。这意味着对于同一事件,您将有多个位置(在不同时间),这是违规的,因为您定义了一对一映射
    • ID 不一定是这个字符串,我可以使用任何其他生成的数字来改变它,但我认为这不会改变。也许关系定义是错误的?我只是希望每个活动都有自己的位置,可以选择简单地更新活动或位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    相关资源
    最近更新 更多