Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate-忽略唯一列约束_Java_Mysql_Hibernate - Fatal编程技术网

Java Hibernate-忽略唯一列约束

Java Hibernate-忽略唯一列约束,java,mysql,hibernate,Java,Mysql,Hibernate,我有一个MySQL表来保存标记(例如,与这里在堆栈溢出上使用的标记类似)。它只是有一个id(pk)和一个标记列来保存标记本身 我的标记实体的带注释的get方法如下所示 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", unique = true, nullable = false) public int getId() { return this.id; } @Column(name

我有一个MySQL表来保存标记(例如,与这里在堆栈溢出上使用的标记类似)。它只是有一个id(pk)和一个标记列来保存标记本身

我的标记实体的带注释的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 of(
unique=true
on
@Colunm
只是一个快捷方式):

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


因此,它似乎没有在插入时强制唯一性。在任何情况下,您都应该在数据库中创建一个唯一的约束。

您忽略了这只是一个信息


您还应该在数据库中的列上添加约束

谢谢你的回答。顺便问一下,这不是很荒谬吗?!不,不是。数据库可以快速验证实体是否唯一。ORM不可能这么快。这就是为什么这是有意义的。我的意思是,我使用这个注释并且它没有在数据库中创建相应的唯一约束,这不是很荒谬吗?这就是我最初理解它的行为方式,尽管我做了两个实验,似乎只有在我使用某些数据库(如HSQL)时,它才对模式反映“unique=true”。当我切换DB配置时,相同的代码生成了MySQL约束。否。该工具可以生成一个脚本来创建数据库。然后将添加约束。但是,当您创建映射时,由您来将DB结构反映到您的应用程序对象中。它似乎在某些数据库上创建了限制,而在其他数据库上没有。注释反映在相应SQL约束的生成中是有意义的。在创建DB的脚本中可以这样做。我通常根本看不到后者,因为我通过Maven使用JPA/Hibernate。