当前位置: 首页 > 面试题库 >

未填充JPA /休眠静态元模型属性— NullPointerException

江德海
2023-03-14
问题内容

我想将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在前面)和相关的堆栈跟踪:

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指南中,我可以看到

当构建Hibernate
EntityManagerFactory时,它将为每个已知的托管类型寻找规范的元模型类,如果发现任何托管类型,它将向其中注入适当的元模型信息,如[JPA
2规范,第6.2节中所述] .2,第200页]

我也可以用

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

Hibernate知道我的元模型,但是写了属性名称

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

仍然拼命空着…

编辑3
:这是JPAAlbum实体及其元模型类。

关于配置我还能说些什么…

  • 我使用的是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)

/
tarball提供了一个更简单的项目。
它只包含我的实体及其元模型,外加一个JUnit测试(元模型的foo崩溃,通常的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的正确位置)

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


问题答案:

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



 类似资料:
  • 问题内容: 我在映射类的嵌入式属性时遇到麻烦。我创建了一些类,这些类与我试图说明的类相似。基本上,我有一个使用继承的@Embeddable类层次结构。顶级类“零件号”仅具有一个属性,扩展类未向“零件号”类添加任何属性,它们仅添加了一些验证/逻辑。 这是我的意思: 部分 零件号 福特PARTNUMBER 高贵的零件编号 当然这是行不通的,因为Hibernate忽略了继承层次结构,并且不喜欢PartN

  • 我无法为第二个请求获取ModelAtort。我的第一个请求是initForm()方法,我准备了命令对象并能够在jsp中显示命令。 通过initForm()我正在填充命令,并在执行ajax调用时在editForm中填充所需的命令。 这是我的Spring表格 我的ajax请求: 在editStudentDetails()方法中,我有方法ajax调用来调用控制器的editForm()。 这是我的控制器:

  • 问题内容: 我正在尝试通过加入实体类来创建BO 我得到100个空BO,即所有属性均为null我的BO如下 ..... 当我删除aliasToBean行并遍历Object []时,我可以看到已获取正确的值,请指导我… 问题答案: 尝试显式地对项目进行别名化,以匹配Bean中的字段名称,如下所示:

  • 问题内容: 我正在建立一对多的关系。所以,我有一个父母和一个孩子。级联属性设置为全部。 我想知道我们是否考虑以下代码: Q1)如果父级拥有该关系,如,对于父级inverse = false,那么是否会在数据库中更新子级元素? Q2)如果孩子拥有关系,如,对于父inverse = true,则是否会在数据库中更新子元素添加? Q3)在是否可以看到更新的方面,谁拥有关联关系对上述代码没有影响? 非常感

  • 问题内容: 这是一个Hibnerate多态性问题和一个数据模型设计问题。他们交织在一起。过去我曾经使用过Hibernate,并且很喜欢它,但是有时候我发现很难想到除了琐碎的设计之外的任何事情。不能敲打hibernate;只是观察到ORM通常可能具有挑战性。 我认为这是一个Hibernate 101问题,但我不确定。我试图实现的目标甚至不可能。 我有一个抽象类Fruit,它将被分为Apple和Ora

  • 我在一个外部包中有@Entity类,它也有静态元模型。在我的应用程序的服务类中,我使用这些元模型和EntityManager/criteria builder/criteria query来检索我的数据。这在运行应用程序时工作良好。然而,当运行单元测试时,我的元模型和它们的属性总是空的。 密码 我的应用程序服务类中的使用情况。。。 “RepositoryQueryBuilder”类只是一个实用程序