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);
}
}