我想将JPA2 Criteria API与元模型对象一起使用,这似乎很简单:
...
Root<JPAAlbum> albm = cq.from(JPAAlbum.class);
... albm.get(JPAAlbum_.theme) ... ;
但是这个Root.get总是抛出一个NullPointerException
。JPAAlbum_.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:
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依赖关系都应包含在存档中。
我有同样的问题,可以通过将Model
and 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”类只是一个实用程序