我有一个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似乎忽略了这一点,即我可以多次保存完全相同的标签,并且它只是创建一个新行而不是抛出异常。
我是否缺少某些东西,还是应该正常工作?
从JavaDoc的UniqueConstraint(unique=true上@Colunm只是一个快捷方式):
UniqueConstraint
unique=true
@Colunm
此注释用于指定唯一约束将包含在主表或辅助表的生成的DDL中。
因此,它似乎没有在插入上强制执行唯一性。无论如何,您都应该在数据库中创建唯一约束。