[jboss-user] [Persistence, JBoss/CMP, Hibernate, Database] - Lazy children loaded when persist is called
scatudal@gmail.com
do-not-reply at jboss.com
Thu Dec 11 10:43:23 EST 2008
Let's say we have an entity that has a OneToMany relationship declared like this :
| @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "Parent")
| public Set<Child> getChildren() {
| return this.children;
| }
|
| public void setChildren(Set<Child> children) {
| this.children = children;
| }
|
When I call persist on the entity, hibernate firsts populates the list of children although I have never accessed the getter.
Here is the call in a stateless session bean:
|
| package org.domain.services.users;
|
| import javax.ejb.Stateless;
| import javax.persistence.EntityManager;
| import javax.persistence.PersistenceContext;
|
| import org.domain.SeamOne.entity.Parent;
| import org.domain.services.users.ParentManager;
|
| public @Stateless
| class ParentManagerBean implements ParentManager {
|
| @PersistenceContext
| private EntityManager em;
|
| public void ChangeName(String pName, String pId) {
| Parent parent = em.find(Parent.class, pId);
| // An hibernate trace just appeared that shows a select just for
| // the parent class
|
| parent.setName( pName );
|
|
| em.persist(parent);
| // An hibernate trace just appeared that shows a select to populate
| // the children
| }
| }
|
|
When I first saw the traces from hibernate, I didn't know for sure which call had produced the traces. I then started jboss in debug mode and stepped through the code to realize that the children were loaded on the persist call.
My code works fine, but I can't see the need for that query when the children have not been accessed because they can't be dirty.
I've tried removing the "cascade = CascadeType.ALL" and it then doesn't do the query, but I now have to call persist on the children of the class when they have been modified.
Is there a reason for that behavior?
Is that an bug?
Is there a way to circumvent this without loosing the cascading feature?
Thank you all,
Sylvain Catudal
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4195970#4195970
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4195970
More information about the jboss-user
mailing list