2016-09-19 76 views
0

如果要使用ON DELETE CASCADE的外键,可以使用@OnDelete注释在休眠模式下执行此操作。它强制hibernate为具有适当外键约束的表生成DDL。Hibernate设置约束“ON UPDATE CASCADE”

我正在寻找的是一个可能性,告诉休眠创建一个约束ON UPDATE CASCADE。不幸的是,在hibernate中没有@OnUpdate注释。 我怎么能告诉休眠生成表的DDL为ON UPDATE CASCADE约束为外键?

+0

更新主键通常不是一个好主意。 – joop

回答

0

您可以使用@Cascade注释吗?

@Cascade(CascadeType.SAVED_UPDATE) 
+0

当hibernate生成CREATE TABLE DDL时,级联注解不幸没有影响。 – rsvidler

0

如果使用休眠本地API,那么你应该使用Hibernate进行级联的注解,它是:

> @Cascade(CascadeType.SAVED_UPDATE)

然后调用save()方法,但使用注释时,应该调用JPA 的persist()方法请查阅hibernate文档以获取更多详细信息。

http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-cascade

以下是这可能是有用的一些级联操作。

CascadeType.PERSIST:表示将save()或persist()操作级联到相关实体。

CascadeType.MERGE:表示相关的 实体在归并实体 合并时合并为托管状态。

CascadeType.REFRESH:对refresh() 操作做同样的事情。

CascadeType.REMOVE:删除所有相关实体 当拥有实体被删除时与此设置的关联。

CascadeType.DETACH:如果发生“手动 分离”,则分离所有相关实体。

CascadeType.ALL:是所有以上 级联操作的简写。

+0

不幸的是,这并不能帮助我。我想要的是在hibernate创建表时获得正确的DDL。外键约束应该如下所示:ON UPDATE CASCADE ON DELETE CASCADE。当我使用您推荐的解决方案时,情况并非如此。我想使用数据库工具(pgAdmin)来修改行,因此我需要一个解决方案,让hibernate使用正确的外键约束创建表。 – rsvidler