[ https://issues.apache.org/jira/browse/TAP5-2754?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ben Weidig reassigned TAP5-2754: -------------------------------- Assignee: Ben Weidig > Some methods of an injected Hibernate Session return null > --------------------------------------------------------- > > Key: TAP5-2754 > URL: https://issues.apache.org/jira/browse/TAP5-2754 > Project: Tapestry 5 > Issue Type: Bug > Components: tapestry-hibernate > Affects Versions: 5.7.2, 5.8.2 > Reporter: Ben Weidig > Assignee: Ben Weidig > Priority: Major > > If you inject the Hibernate Session, some calls might return null. > Identified problematic methods are: > * createNativeQuery > * createQuery > * getNamedQuery > It possible that more methods are affected. > Debugging the issue is complicated, as the Hibernate Session is hidden away > behind a PropertyShadowBuilder. > It's a property on org.apache.tapestry5.hibernate.HibernateSessionManager > that is created in > org.apache.tapestry5.hibernate.modules.HibernateCoreModule.buildSession(HibernateSessionManager, > PropertyShadowBuilder) > The reasoning for this is that the Session doesn't have to be scoped > PerThread, as the HibernateSessionManager is, and the Session is only > actually created on first use, not on HSM creation. > I've debugged through the shadowing process and checked the created > PlasticClass and underlying ClassNode, and they look good to me as all > methods are there. > As everything is runtime-generated bytecode, maybe a tool like > [https://github.com/AdoptOpenJDK/jitwatch] could help to analyze what's > actually happening. > My guess is that the big changes starting Hibernate 5.2 (moving towards > javax.persistence, like Session now extending javax.persistence.EntityManager > and org.hibernate.jpa.HibernateEntityManage) are not 100% compatible with > what Plastic/PropertyShadowBuilder are doing behind the scenes. > It's not completely broken, but certain things seem to work a little > differently. > > *Current workaround:* > Call {{getSession()}} on the injected Session, the method will then work as > intended. > > *Maybe related ticket:* > https://issues.apache.org/jira/browse/TAP5-2582 > > *Related mailing list threads:* > [https://lists.apache.org/thread/r4bhr01d95kpl8pslrhr1bdx486b29nd] > [https://lists.apache.org/thread/qwc6430qq0f4nt7oc755z443c2zh6j68] > > -- This message was sent by Atlassian Jira (v8.20.10#820010)