【问题标题】:Unique Value in JPA IssueJPA问题的独特价值
【发布时间】:2023-03-22 20:28:01
【问题描述】:

我的实体包含Long id 属性,我从用户那里获得具有id 值的JSON 请求,

当我第一次尝试保存它时,它正在保存,当我尝试在 JPA 保存方法中使用相同的 id 时,它也在保存。我用下面的,

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "id", unique = true)
    private Long id;

我尝试了以下,

@Table(name = "Person",
        uniqueConstraints={
                @UniqueConstraint(columnNames = {"id"})})

也不行。我的请求 JSON 如下,如果我在下一个请求中使用相同的 JSON 也会保存。

{
  "id":1,
  "name":"John"
}

【问题讨论】:

  • 您的唯一约束不起作用?
  • 在我的情况下,来自用户 JSON 的 id,是的,不起作用。如何使它们独一无二。尝试了上述方法,但没有运气。
  • 当您将具有 id 的实体传递给 save 方法时,不会插入新的数据库记录,而是进行更新,因此不会触发 DB 限制。操作是正确的。您可以尝试将 name 设置为唯一键并插入 {"id": 1, "name": "John"} 和 {"id": 2, "name": "John"}
  • 试过这个吗? : uniqueConstraints={@UniqueConstraint(columnNames = "column1")}

标签: hibernate jpa spring-data-jpa


【解决方案1】:

问题可能出在代码中。

当您说 strategy=GenerationType.IDENTITY 并传递存在 ID 时,hibernate 认为该实体已经在 DB 中,因为它具有 ID。

IDENTITY 表示您的数据库有“id”列,并且在插入发生时它会自动递增。

如果您总是收到具有现有 ID 的实体,只需删除 @GeneratedValue(strategy=GenerationType.IDENTITY),我希望它会没事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    相关资源
    最近更新 更多