[jboss-jira] [JBoss JIRA] Commented: (JBAS-5474) @PostLoad -> LazyInitializationException: illegal access to loading collection ond a @OneToMany with FetchType.EAGER
henk de boer (JIRA)
jira-events at lists.jboss.org
Sun Aug 29 14:18:35 EDT 2010
[ https://jira.jboss.org/browse/JBAS-5474?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12547535#action_12547535 ]
henk de boer commented on JBAS-5474:
------------------------------------
Why is an issue such as this still open after more than 2 years?
I have the exact same problem. I have an eagerly loaded association for a collection of entities. For performance reasons I would like to create an internal Set for some property of these entities. Either the setter or the @PostLoad would be a clean and simple place to create this, yet Hibernate won't let me because of this silly exception.
I now have to code a very ugly workaround, where I manually track stuff and build this Set after the first to its setter. This works, but it's verbose, ugly and brittle.
> @PostLoad -> LazyInitializationException: illegal access to loading collection ond a @OneToMany with FetchType.EAGER
> --------------------------------------------------------------------------------------------------------------------
>
> Key: JBAS-5474
> URL: https://jira.jboss.org/browse/JBAS-5474
> Project: JBoss Application Server
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: EJB3
> Affects Versions: JBossAS-4.2.2.GA
> Environment: Win XP SP2, Java 1.5.0_15-b04
> Reporter: Stefan Lindner
> Assignee: Emmanuel Bernard
> Attachments: Child.java, Parent.java, PostLoadTest.java
>
>
> I have a bean with a @OneToMany relation mapping like
> private List<TherapieeinheitBean> therapieeinheiten;
> @OneToMany(
> cascade = {CascadeType.REFRESH},
> fetch = FetchType.EAGER,
> mappedBy="therapiekatalog"
> )
> with FetchType.EAGER and a simnple @PostLoad like
> @PostLoad
> public void postLoad() {
> System.out.println("!!!!!!!!!! postLoad !!!!!!!!!!");
> System.out.print("size: " + therapieeinheiten.size());
> }
> When an entity of this bean is loaded JBoss trows
> org.hibernate.LazyInitializationException: illegal access to loading collection
> at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:341)
> at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
> at org.hibernate.collection.PersistentBag.iterator(PersistentBag.java:249)
> at de.visiodesk.therapiekatalog.TherapiekatalogBean.postLoad(TherapiekatalogBean.java:170)
> .
> .
> .
> and prints the messages
> WARN [LoadContexts] fail-safe cleanup (collections) : org.hibernate.engine.loading.CollectionLoadContext at 2c8ce9<rs=Ingres-ResultSet[18523]>
> WARN [CollectionLoadContext] On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [206] entries
> afterwards. The PostLoad method should be called after the data was completely loaded. Is there a workaround for this Problem? I found some other ressources on the net where peole had the same problem, but I saw no resolution, no hint, no workaround.
>
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list