一尘不染

Hibernate-唯一列约束被忽略

hibernate

我有一个MySQL表来保存标签(即像在Stack Overflow上使用的那些标签)。它仅具有一个id(pk)和一个标签列来保存标签本身。

我的Tag实体的带注释的get方法如下所示。

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public int getId() {
    return this.id;
}

@Column(name = "tag", unique = true, nullable = false)
public String getTag() {
    return this.tag;
}

我在标签上使用了唯一的列约束,因为给定标签的行不应超过一行。但是,Hibernate似乎忽略了这一点,即我可以多次保存完全相同的标签,并且它只是创建一个新行而不是抛出异常。

我是否缺少某些东西,还是应该正常工作?


阅读 282

收藏
2020-06-20

共1个答案

一尘不染

从JavaDoc的UniqueConstraintunique=true@Colunm只是一个快捷方式):

此注释用于指定唯一约束将包含在主表或辅助表的生成的DDL中。

因此,它似乎没有在插入上强制执行唯一性。无论如何,您都应该在数据库中创建唯一约束。

2020-06-20