Atributos de metamodelo estático de JPA / hibernação não preenchidos - NullPointerException

Gostaria de usar a API JPA2 Criteria com objetos de metamodelo, o que parece ser bastante fácil:

...
Root<JPAAlbum> albm = cq.from(JPAAlbum.class);
... albm.get(JPAAlbum_.theme) ... ;

mas este Root.get sempre lança umNullPointerException. JPAAlbum_.theme foi gerado automaticamente pelo Hibernate e parece

public static volatile SingularAttribute<JPAAlbum, JPATheme> theme;

mas obviamente nunca é preenchido.

Estou perdendo uma etapa na inicialização da estrutura?

EDITAR: Aqui está um trecho de como eu uso o JPA e o metamodelo quando está travando:

    CriteriaBuilder cb = em.getCriteriaBuilder();

    CriteriaQuery<JPAAlbum> cq = cb.createQuery(JPAAlbum.class) ;
    Root<JPAAlbum> albm = cq.from(JPAAlbum.class);
    cq.where(cb.equal(albm.get(JPAAlbum_.theme).get(JPATheme_.id),
                        session.getTheme().getId())) ;

(JPAAlbum_ é uma aula, então eu sóimport antes) e o rastreamento de pilha associado:

Caused by: java.lang.NullPointerException
    at org.hibernate.ejb.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:138)
    at net.wazari.dao.jpa.WebAlbumsDAOBean.getRestrictionToAlbumsAllowed(WebAlbumsDAOBean.java:55)

EDIT 2:

No guia do JBoss EntityManager, posso ver que

Quando o Hibernate EntityManagerFactory estiver sendo construído, ele procurará uma classe de metamodelo canônico para cada um dos tipos digitados gerenciados conhecidos e, se encontrar algum, injetará neles as informações de metamodelo apropriadas, conforme descrito em [Especificação JPA 2, seção 6.2. .2, página 200]

Eu também pude verificar com

     for (ManagedType o : em.getMetamodel().getManagedTypes()) {
            log.warn("___") ;
            for (Object p : o.getAttributes()) {
                log.warn(((Attribute)p).getName()) ;
            }
        }

que o Hibernate está ciente do meu metamodelo, os nomes dos atributos são escritos, no entanto

   log.warn("_+_"+JPAPhoto_.id+"_+_") ;

permanece desesperadamente vazio ...

EDIT3: aqui está oEntidade JPAAlbum e os seusclasse metamodelo.

O que mais posso dizer sobre minha configuração ...

Eu uso o hibernat3.5.6-Final (de acordo com META-INF / MANIFEST.MF),

implantar no Glassfish3.0.1

do Netbeans6.9.1;

e o aplicativo depende do EJB3.1.,

Eu espero que isso ajude !

EDIT 4:

infelizmente, o teste JUnit leva à mesma exceção:

java.lang.NullPointerException
    at org.hibernate.ejb.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:138)
    at net.wazari.dao.test.TestMetaModel.foo(TestMetaModel.java:55)

Um projeto muito mais simples está disponívelaqui/tarball. Ele contém apenas minhas entidades e seu metamodelo, além de um teste JUnit (foo trava com o metamodelo, bar está bem com a consulta usual.

EDIT 5:

Você deve conseguir reproduzir o problema baixando otarball, construindo o projeto:

ant compile
or
ant dist

e inicie o teste JUnitnet.wazari.dao.test.TestMetaModel

 CLASSPATH=`sh runTest.sh` java org.junit.runner.JUnitCore  net.wazari.dao.test.TestMetaModel

(editarrunTest.sh para apontar CLASSPATH para o local correto do seu jar JUnit4-5)

Todas as dependências de hibernação que eu uso devem ser incluídas no arquivo morto.

questionAnswers(7)

yourAnswerToTheQuestion