In section 6.2.16 of the java persistence spec (Final draft) I read the 
following:

anonymous wrote : 
  | The set of managed persistence classes that are managed by a persistence 
unit is defined by using one or
  | more of the following:
  | ...
  | 
  | The annotated managed persistence classes contained in the root of the 
persistence unit (unless
  | the exclude-unlisted-classes element is specified)
  | 

How does the current version of Hibernate handle this? I'm using Hibernate Core 
3.1.1 with Annotations 3.1b8 and EntityManager 3.1b6 in combination with Tomcat 
5.5.15 and Sun JDK 1.5u6 on Windows XPsp2.

If I list the classes explicitly in my persistence.xml, everything works as 
expected and I can make use of a lot of EJB3 facilities. However, as soon as I 
remove the explicit class listing, everything Hibernate tries to lookup (e.g. 
named queries, entities, etc) fails. E.g. I get exceptions like: 
org.hibernate.MappingException: Named query not known: MyClass.MyQuery
        
I didn't set the exclude-unlisted-classes element, but even if I would have 
done that, it doesn't seem to be used in the source code. 
PersistenceMetadata.java has a getExcludedUnlistedClasses method, but it's just 
never called from anywhere (or so it seems).

I tried to work my way through the initialisation part of an entity manager, 
but I can't spot the code anywhere that scans the root of the persistence unit 
for classes that contain EJB3 annotations.

Specifically, the parts that puzzle me are:


  | In EJB3Configuration.createFactory:
  |   
  |   if ( metadata.getClasses().size() > 0 ) {
  |     workingVars.put( HibernatePersistence.CLASS_NAMES, 
metadata.getClasses() );
  |   }
  |   
  | 
  | 
  | In Ejb3Configuration.createEntityManagerFactory:
  | 
  |   if ( workingVars.containsKey( HibernatePersistence.CLASS_NAMES ) ) {
  |       // check and add to cfg.annotatedClasses CLASS_NAMES ultimately come 
from persistence.xml
  | 
  |   }
  | 
  |   if ( workingVars.containsKey( HibernatePersistence.LOADED_CLASSES ) ) {
  |       // check and add to cfg.annotatedClasses. LOADED_CLASSES are never 
inserted anywhere (?)
  |   }
  | 
  |   // ...
  | 
  |   listenerConfigurator.configure() -> ... -> 
AnnotationConfiguration.secondPassCompile ->
  |   // process annotations in classes and fill cfg.classes Map.
  | 

It seems though that HibernatePersistence.LOADED_CLASSES should be the key 
under which the classes from the root of the unit are stored, but this key is 
never inserted, nor could I locate any code that attempts this.

Did I just overlook something? I know that other people don't list their 
classes at all in persistence.xml and they still get processed by Hibernate, so 
where could the code be that does this? Why would it possible not work in my 
situation?

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3929182#3929182

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3929182


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
JBoss-user mailing list
JBoss-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to