使用Ebean生成“on delete cascade”

7
我正在使用Ebean,需要在DDL(数据定义语言)中添加"on delete cascade",请问该使用哪个注解?我已经尝试过:
@OneToMany(cascade=CascadeType.REMOVE)

但这会给出“on delete restrict” / 不改变默认的“on delete restrict”?
3个回答

1

试试这个

@OneToMany(mappedBy = "parent", cascade = javax.persistence.CascadeType.REMOVE)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)

0
尽管您要求“on delete cascade”作为DDL,但我的答案涵盖了软件层面。EBean似乎不生成DB级别的级联。相反,它在软件中处理级联操作。我认为这是一个很好的替代方案。 请参见此内容(avaje-ebeanorm-4.6.2.jar:com/avaje/ebeaninternal/server/persist/DefaultPersister)
 /**
 * Delete the bean.
 * <p>
 * Note that preDelete fires before the deletion of children.
 * </p>
 */
private void delete(PersistRequestBean<?> request) {

    DeleteUnloadedForeignKeys unloadedForeignKeys = null;

    if (request.isPersistCascade()) {
        // delete children first ... register the
        // bean to handle bi-directional cascading
        request.registerDeleteBean();
        deleteAssocMany(request);
        request.unregisterDeleteBean();
    ...

你可以看到,如果请求是级联的,那么首先会删除它的子项(可能这是递归的)。

在我的Postgre数据库中,自动生成的外键约束不包含任何级联,但仍然进行了级联删除操作。


0

你需要在父类上使用@OnDelete注解,以便Hibernate在DDL中生成它(@OnDelete(action = OnDeleteAction.CASCADE))

例如:

@Entity
class Parent {
   /* id and some attributes */

  @OneToMany(mappedBy = "parent", cascade = {CascadeType.REMOVE})
  @ForeignKey(name = "FK_CHILD_PARENT")
  @OnDelete(action = OnDeleteAction.CASCADE)
  List<Child> children;
}

@Entity
class Child {
   /* id and some attributes */

   Parent parent;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接