【问题标题】:hibernate two column unique index cannot update values休眠两列唯一索引无法更新值
【发布时间】:2017-10-03 20:07:41
【问题描述】:

所以我试图添加一个使用两列的唯一约束。我在 db 中添加了唯一约束,我有以下 Java 代码

@Entity
@Table(
    name = "test_table",
    uniqueConstraints = @UniqueConstraint(
        columnNames = {
            "other_table_id",
            "sort_order"
        },
        name = "my_unique_constraint")
)
class SomeTable {

    private String label;

    @ManyToOne(optional = false)
    @JoinColumn(name = "other_table_id", nullable = false)
    private OtherTable otherTable;

    @NotNull
    @Column(name = "sort_order", nullable = false)
    private int sortOrder;
}

当我修改此表的排序并更新我得到的记录时

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:
 Duplicate entry '1-2' for key 'my_unique_constraint'

如何实现@UniqueConstraint 以免出现此类错误。

【问题讨论】:

  • 你能提供你的修改代码吗?
  • 你的意思是完整的代码吗?
  • 我想知道更新是如何完成的。你是真的做更新还是真的试图插入第二条记录。
  • 我调用hibernate saveOrUpdate来更新实体
  • 两者都是更新..数据已经使用休眠保存方法插入。

标签: java mysql hibernate jpa


【解决方案1】:

您收到此错误是因为您的 uniqueConstraints 没有分开。

所以我的做法是把两个约束分开:

@Table(
    name = "test_table",
    uniqueConstraints = {
            @UniqueConstraint(columnNames = "other_table_id"),
            @UniqueConstraint(columnNames = "sort_order")
    },
        name = "my_unique_constraint")
)

【讨论】:

  • 我相信这会创建两个唯一的约束,我们不能在一个表中拥有相同的 sort_order 两次。我想创建唯一约束,使得 other_table_id 没有重复的 sort_order。
猜你喜欢
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多