我想将JPA2 Criteria API与元模型对象一起使用,这似乎很简单:

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

但是此Root.get总是抛出NullPointerExceptionJPAAlbum_.theme由Hibernate自动生成,看起来像
public static volatile SingularAttribute<JPAAlbum, JPATheme> theme;

但显然从未有人居住。

我是否缺少框架初始化步骤?

编辑:这里是当崩溃时我如何使用JPA和元模型的摘要:
    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_是一个类,所以我只是import之前)和关联的stacktrace:
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)

编辑2:

在JBoss EntityManager指南中,我可以看到



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

Hibernate知道我的元模型,属性名称已写入,但是
   log.warn("_+_"+JPAPhoto_.id+"_+_") ;

仍然拼命空着...

EDIT3 :这是JPAAlbum entity及其metamodel class

关于配置我还能说些什么...
  • 我使用Hibernat 3.5.6-Final(根据META-INF / MANIFEST.MF),
  • 在Glassfish 3.0.1上部署
  • 来自Netbeans 6.9.1的
  • ;
  • ,该应用程序依赖于EJB 3.1

  • 希望对您有所帮助!

    编辑4:

    不幸的是,JUnit测试导致了相同的异常:
    java.lang.NullPointerException
        at org.hibernate.ejb.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:138)
        at net.wazari.dao.test.TestMetaModel.foo(TestMetaModel.java:55)
    

    可以使用here / tarball更简单的项目。 它只包含我的实体及其元模型,以及一个JUnit测试(foo与元模型一起崩溃,bar与通常的Query没关系。

    编辑5:

    您应该能够通过下载tarball来重现该问题,构建项目:
    ant compile
    or
    ant dist
    

    并启动JUnit测试net.wazari.dao.test.TestMetaModel
     CLASSPATH=`sh runTest.sh` java org.junit.runner.JUnitCore  net.wazari.dao.test.TestMetaModel
    

    (编辑runTest.sh以将CLASSPATH指向JUnit4-5 jar的正确位置)

    我使用的所有休眠依赖关系都应包含在存档中。

    最佳答案

    我有同样的问题,可以通过将ModelModel_类放入同一包中来解决。

    07-24 15:32