Java-EE6: FetchType.LAZY with static weaving throws strange exception

杀马特。学长 韩版系。学妹 提交于 2020-02-02 08:49:06

问题


My Solution consists of 3 different projects:

  • EJB project with Netbeans auto-generated Facades to manage Entity classes and the persistence.xml

  • Class-Library that holds all @Entity annotated and statically weaved database classes and the remote interfaces for the facade ejb's (shared between EJB and stand-alone client)

  • Stand-alone Client that consists mainly of Swing GUI classes

I use Glassfish 3.1.2, Eclipselink 2.3 as JPA-provider, Netbeans 7.1.1 and a MySQL database. I configured an Ant-task that statically weaves my entity classes on the basis of the persistence.xml.

I have several @OneToOne, @ManyToOne and @ManyToMany annotated relations between the entities decorated with fetch=FetchType.LAZY.

Now I get all along the following errors:

Exception in thread "Mainframe Loader" Local Exception Stack: 
Exception [EclipseLink-7242] (Eclipse Persistence Services - 2.3.2.v20111125-r10461):     org.eclipse.persistence.exceptions.ValidationException
Exception Description: An attempt was made to traverse a relationship using indirection that had a null Session.  This often occurs when an entity with an uninstantiated LAZY relationship is serialized and that lazy relationship is traversed after serialization.  To avoid this issue, instantiate the LAZY relationship prior to serialization.
 at org.eclipse.persistence.exceptions.ValidationException.instantiatingValueholderWithNullSession(ValidationException.java:998)
 at org.eclipse.persistence.internal.indirection.UnitOfWorkValueHolder.instantiate(UnitOfWorkValueHolder.java:220)
 at org.eclipse.persistence.internal.indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:88)
 at org.eclipse.persistence.indirection.IndirectList.buildDelegate(IndirectList.java:244)
 at org.eclipse.persistence.indirection.IndirectList.getDelegate(IndirectList.java:414)
 at org.eclipse.persistence.indirection.IndirectList.size(IndirectList.java:752)
 at ch.lawsuite.gui.mail.PosteingangUI.updateDokumentTable(PosteingangUI.java:47)
 at ch.lawsuite.gui.mail.MailboxUI.updateDokumentTables(MailboxUI.java:81)
 at ch.lawsuite.gui.mail.MailboxUI.initMailboxes(MailboxUI.java:37)
 at ch.lawsuite.gui.mail.MailboxUI.<init>(MailboxUI.java:23)
 at ch.lawsuite.gui.MainframeUI.initModules(MainframeUI.java:191)
 at ch.lawsuite.gui.login.LoginUI$MainframeLoader.run(LoginUI.java:131)

Any help is highly appreciated. I completely got deadlocked with this issue for more than a week now :-(

Many thanks in advance!


回答1:


Once the entity is passed to a remote client - you can't load none-loaded lazy properties. You need to make sure they are loaded (touch them or something) in the facade that passes them remotely. Static weaving has nothing to do with this. (Well, the automatic process is different with static/dynamic/no weaving - but conceptually for us as developers there is no difference)



来源:https://stackoverflow.com/questions/10744179/java-ee6-fetchtype-lazy-with-static-weaving-throws-strange-exception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!