Why delete-orphan needs "cascade all" to run in JPA/Hibernate ?

Posted by Jerome C. on Stack Overflow See other posts from Stack Overflow or by Jerome C.
Published on 2010-01-29T09:02:15Z Indexed on 2010/05/27 1:41 UTC
Read the original article Hit count: 292

Filed under:
|
|
|

Hello,

I try to map a one-to-many relation with cascade "remove" (jpa) and "delete-orphan", because I don't want children to be saved or persist when the parent is saved or persist (security reasons due to client to server (GWT, Gilead))

But this configuration doesn't work. When I try with cascade "all", it runs. Why the delete-orphan option needs a cascade "all" to run ?

here is the code (without id or other fields for simplicity, the class Thread defines a simple many-to-one property without cascade): when using the removeThread function in a transactional function, it does not run but if I edit cascade.Remove into cascade.All, it runs.

@Entity
public class Forum 
{   
private List<ForumThread>   threads;


/**
 * @return the topics
 */
@OneToMany(mappedBy = "parent", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
public List<ForumThread> getThreads()
{
    return threads;
}

/**
 * @param topics the topics to set
 */
public void setThreads(List<ForumThread> threads)
{
    this.threads = threads;
}

public void addThread(ForumThread thread)
{
    getThreads().add(thread);
    thread.setParent(this);
}

public void removeThread(ForumThread thread)
{
    getThreads().remove(thread);
}

}

thanks.

© Stack Overflow or respective owner

Related posts about hibernate

Related posts about jpa