2012-11-12 7 views
6

Ich benutze Ebean und ich muss am Ende bekommen "auf Löschkaskade" als DDL (Datendefinitionssprache) - welche Anmerkung macht das? Ich habe versucht,Erzeuge "on delete cascade" mit Ebean

aber das gibt „auf löschen beschränken“/nicht die Standardeinstellung ändern „auf Lösch beschränken“?

Antwort

1

Versuchen Sie, diese

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

Sie benötigen die @OnDelete Anmerkung auf der übergeordneten Klasse verwenden, um für Hibernate es in der DDL (@OnDelete(action = OnDeleteAction.CASCADE))

Zum Beispiel zu generieren:

@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; 
} 
0

Obwohl Sie nach "on delete cascade" als DDL gefragt haben, deckt meine Antwort die Softwareebene ab. EBean scheint keine DB-Level-Kaskaden zu erzeugen. Stattdessen behandelt es die Kaskadierung in Software. Ich denke, das ist eine gute Alternative.

Sehen Sie diese von (avaje-ebeanorm-4.6.2.jar: com/avaje/ebeaninternal/server/anhalten/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(); 
    ... 

Sie können sehen, dass, wenn die Anforderung eine Kaskade, dann werden zuerst seine Kinder gelöscht (wahrscheinlich ist das irgendwie rekursiv).

In meiner Postgre-DB enthalten die automatisch generierten Fremdschlüsseleinschränkungen keine Kaskaden, aber die Löschoperationen sind kaskadiert.