Hibernate/JPA - 访问 SingularAttribute 参数时出现 NullPointerException

2023-11-24

我正在尝试将 JPA2 类型安全标准查询与 Hibernate 5.0.7.Final 一起使用。

...
criteria.where( builder.equal( root.get(SingularAttribute.attr), value ));
//where parameters are
//criteria.where( builder.equal( root.get(Person_.name), "Can" ));
...

root.get 总是抛出NullPointerException。 元模型类Person_ for Person是由生成的org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor.

类似的问题被问到JPA/Hibernate 静态元模型属性未填充 -- NullPointerException但这次两个类都在同一个包中。

堆栈跟踪:

java.lang.NullPointerException
at org.hibernate.jpa.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:123)

My code:

我用来确保他们拥有的界面getId();.

package it.unibz.db.hibernate.model;

public interface ModelInterface<PK extends Serializable> extends Serializable {
    PK getId();
}

模型类

package it.unibz.db.hibernate.model;

@Entity
@Table(name ="person")
public class Person implements ModelInterface<Integer> {
    @Id
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }
    //other getter and setters
}

生成元模型Person_类

package it.unibz.db.hibernate.model;

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Person.class)
public abstract class Person_ {

    public static volatile SingularAttribute<Person, String> name;
    public static volatile SingularAttribute<Person, Integer> id;

}

我用 PersonDao 继承的通用 DAO 类

public class GenericDao<E extends ModelInterface<PK>, PK extends Serializable> implements DaoInterface<E, PK> {
private Class<E> type;

public GenericDao(Class<E> type) {
    this.type = type;
    //called as super(ClassName.class); eg. super(Person.class);
}

public List<E> readBy(SingularAttribute column, String value) throws Exception {
    EntityManager em = HibernateUtil.getEntityManager();
    CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaQuery<E> criteria = builder.createQuery(type);
    Root<E> root = criteria.from(type);

    criteria.select(root);
    criteria.where( builder.equal( root.get(column), value ));
    List<E> entityList = em.createQuery(criteria).getResultList();
    em.close();
    return entityList;
    }
}

我的一些依赖项

  • hibernate-c3p0 5.0.7.Final

  • hibernate-entitymanager 5.0.7.Final

  • postgresql 9.4.1207.jre7

  • hibernate-jpamodelgen 5.0.7.Final

EDIT:

在 main 方法中运行此代码有效

EntityManager em = HibernateUtil.getEntityManager();
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Person> criteria = builder.createQuery(Person.class);
Root<Person> root = criteria.from(Person.class);
criteria.select(root);
criteria.where( builder.equal( root.get(Person_.name), "Can" ));
List<Person> entityList = em.createQuery(criteria).getResultList();
//do stuff with entityList

但方法中包含的相同代码会抛出NullPointerException.

public List<Person> readBy(SingularAttribute column, String value) throws Exception {
    log.debug("Reading entity by");

    EntityManager em = HibernateUtil.getEntityManager();
    CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaQuery<Person> criteria = builder.createQuery(Person.class);
    Root<Person> root = criteria.from(Person.class);

    criteria.select(root);
    criteria.where( builder.equal( root.get(column), value ));
    List<Person> entityList = em.createQuery(criteria).getResultList();
    em.close();
    return entityList;
}

所以看来问题已经过去了SingularAttribute方法的参数readBy(SingularAttribute column, String value).

我在 main 中测试了这段代码并打印了false

EntityManager em = HibernateUtil.getEntityManager();
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Person> criteria = builder.createQuery(Person.class);
Root<Person> root = criteria.from(Person.class);
System.out.println(root.get(Person_.name) == null); //false

同时这会抛出InvocationTargetException引起的NullPointerException at root.get(column).

//invoked as personDao.test(Person_.name) from main
public void test(SingularAttribute column) {
    EntityManager em = HibernateUtil.getEntityManager();
    CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaQuery<Person> criteria = builder.createQuery(Person.class);
    Root<Person> root = criteria.from(Person.class);
    System.out.println(root.get(column) == null); //InvocationTargetException
}

这是它应该做的吗?我怎样才能通过SingularAttribute对象作为参数的方法?


Calling HibernateUtil.getEntityManager()在方法调用之前的 main 中以某种方式起作用。当我从字面上调用方法的空块时它甚至可以工作init().这可能与类的初始化有关。这是代码片段。

public class HibernateUtil {
    private static EntityManagerFactory emFactory;
    private static EntityManager em;
    private static final Logger log = LoggerFactory.getLogger(HibernateUtil.class);
    private static final String PERSISTENCE_UNIT = "pt";
    static{
        log.info("Creating entity manager factory");
        emFactory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT);
    }
    //calling this from main before PersonDao's method calls somehow works...
    public void init(){} //does nothing
    public static EntityManager getEntityManager(){
        if(em != null && em.isOpen()){
            closeEntityManager();
        }
        log.debug("Creating new entity manager");
        em = emFactory.createEntityManager();
        return em;
    }
    public static void close() throws Exception {
        if(em != null && em.isOpen()){
            closeEntityManager();
        }
        log.info("Closing entity manager factory");
        emFactory.close();
    }
    private static void closeEntityManager(){
        log.info("Closing last entity manager");
        em.close();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate/JPA - 访问 SingularAttribute 参数时出现 NullPointerException 的相关文章

  • withTransaction 和 withNewTransaction 有什么区别?

    以下动作有什么区别 def someAction User withTransaction and def someAction User withNewTransaction 我什么时候用什么 当 grails 操作仅包含 Transac
  • 在哈希图中存储字符和二进制数

    我正在尝试存储字母到二进制数的映射 这是我的映射 h 001 i 010 k 011 l 100 r 101 s 110 t 111 为此 我创建了一个哈希映射并存储了键值对 我现在想显示给定句子的相应二进制值 这是我的代码 package
  • 如何在数据库中对 (Java) 枚举进行建模(使用 SQL92)

    您好 我正在使用名为 性别 的列对实体进行建模 在应用程序代码中 性别应该是一个 Java 枚举类型 有 2 个值 男性和女性 知道作为数据类型的枚举不是通用 SQL 语言 92 的一部分 您将如何建模它 数据模型必须是可移植的 以便由多个
  • org.postgresql.util.PSQLException:协议错误。会话设置失败

    我知道这些类型的问题已经存在 但提供的解决方案对我不起作用 在我的应用程序中 没有版本不匹配的黑白驱动程序和 PostgreSQL 服务器 我还没有找到任何其他解决方案 我正在使用 PostgreSQL 服务器 9 4 和 postgres
  • FFmpeg 不适用于 android 10,直接进入 onFailure(String message) 并显示空消息

    我在我的一个项目中使用 FFmpeg 进行视频压缩 在 Android 10 Google Pixel 3a 上 对于发送执行的任何命令 它会直接进入 onFailure String message 并显示空消息 所以我在我的应用程序 g
  • Codility 钉板

    尝试了解 Codility NailingPlanks 的解决方案 问题链接 https app codility com programmers lessons 14 binary search algorithm nailing pla
  • Hystrix是否可以订阅CircuitBreaker开启事件?

    对于单元测试 我希望能够订阅 Hystrix 事件 特别是在断路器打开或关闭时发生事件 我四处寻找示例 似乎解决方法是利用指标流并监视断路器标志 由于 Hystrix 是基于 RxJava 构建的 我认为应该在某个地方有一个事件订阅接口 在
  • 无法在 Mac OS X 上启动应用程序 我收到错误 LSOpenURLsWithRole() 应用程序失败,错误为 -10810

    问题 我正在尝试启动一个应用程序 遗传网络分析仪 http www genostar com category products gna 但它默默地失败了 使用时open gna app产生以下错误消息 LSOpenURLsWithRole
  • Scala(或 Java)中泛型函数的特化

    是否可以在 Scala 中专门化泛型函数 或类 例如 我想编写一个将数据写入 ByteBuffer 的通用函数 def writeData T buffer ByteBuffer data T buffer put data 但由于 put
  • Kerberos 缓存票证

    我使用的是 Windows 7 64 位 我创建了一个简单的应用程序来对实现 PrivilegedAction 的类的 run 方法中的文件进行计数 以下是我的 jaas conf 文件 CountFiles com sun securit
  • 更改 RowLayout SWT Java 中元素的顺序

    有没有办法更改在行布局中创建的元素的顺序 我想将其显示在元素中 首先显示 例如 如果我创建 element1 则 element2 element3 element4 我想看到的布局为 元素4 元素3 元素2 元素1 这意味着最后创建的元素
  • Netty中连接关闭后重新连接的最佳方法是什么

    简单场景 扩展 SimpleChannelUpstreamHandler 的较低级别的类 A 此类是发送消息和接收响应的主力 系统其他部分可以使用顶级类 B 来发送和接收消息 可以模拟同步和异步 此类创建 ClientBootstrap 设
  • NoSuchMethodError:将 Firebase 与应用程序引擎应用程序集成时

    我试图将 firebase 实时数据库与谷歌应用程序引擎应用程序集成 我在调用时收到此错误 gt DatabaseReference ref FirebaseDatabase gt getInstance gt getReference t
  • 膨胀类片段 InflateException 二进制 XML 文件时出错

    我正在使用 Material Design 和 NavigationDrawer 布局等设计我的第一个应用程序 但我遇到了一个问题 该应用程序非常简单 它只显示文本 并且基于 Android Studio 中提供的模板 尝试启动我的应用程序
  • 在方法内声明类 - Final 关键字 [重复]

    这个问题在这里已经有答案了 给定方法中的以下内部类 IsSomething public class InnerMethod private int x public class Something private int y public
  • 如何使用 SAX Java 解析器读取注释文本

    我只想使用 Java 中的 SAX 解析器读取 XML 文件中对象标记的注释 这是我的文件的摘要
  • 如何使用maven创建基于spring的可执行jar?

    我有一个基于 Maven 的 Spring WS 客户端项目 我想将其打包为单个 jar 在eclipse中 一切运行正常 当我尝试将其打包为可执行 jar 时 我收到 ClassNotFound 异常 因为 Spring jar 未包含在
  • 条件查询:按计数排序

    我正在尝试执行一个标准查询 该查询返回 stackoverflow 中回答最多的问题 例如常见问题解答 一个问题包含多个答案 我正在尝试使用标准查询返回按每个问题的答案数排序的回答最多的问题 任何人都知道我应该在 hibernate cri
  • RecyclerView 不调用 onCreateViewHolder 或 onBindView

    没有收到任何错误 所有数据似乎都有效 由于某种原因 没有调用与视图相关的方法 我已确定以下事项 getItemCount 是唯一被调用的适配器方法 并且返回一个正整数值 我知道这将是你们将要查看的区域 构造函数正在被调用 成员变量有效 Pa
  • java中的回调是什么[重复]

    这个问题在这里已经有答案了 可能的重复 什么是回调函数 https stackoverflow com questions 824234 what is a callback function 我已经阅读了回调的维基百科定义 但我仍然没有明

随机推荐

  • cmake:读取并编译动态生成的 cpp 文件列表

    我有一个自定义工具 可以处理给定的 IDL 文件列表并生成许多 cpp 和 h 文件作为输出 我想将这些文件添加到要在我的 CMakeLists 中编译的内容列表中 并对这些文件对 IDL 的依赖关系进行建模 为了简单起见 我将声明对任何
  • 在 JSP 中启用 JavaServerPages 标准标记库 (JSTL)

    我觉得我错过了一些东西 从表面上看 JSP 开箱即用 支持标签 如这个问题的答案显示 这个人问了一个纯 jsp 问题并得到了涉及标签的答案 但是如果我尝试运行给定的代码
  • 如何在角度材料日期选择器上添加蒙版

    我最近开始使用角度材料来构建角度形式 其中我需要使用角度材料日期选择器 但无法在输入元素上添加任何掩码 我希望用户只能输入数字并在输入时将其格式化为日期格式 MM DD YYYY html div class example contain
  • 从文本文件中删除空行[重复]

    这个问题在这里已经有答案了 我有一个文本文件 其中有一些空行 意思是上面没有任何东西并且只是占用空间的线条 它看起来像这样 The quick brown fox jumped over the lazy dog 我需要它看起来像这样 Th
  • C++ 如何避免浮点运算错误[重复]

    这个问题在这里已经有答案了 我正在编写一个以浮点数递增的循环 但我遇到了以下示例所示的浮点算术问题 for float value 2 0 value lt 2 0 value 0 2 std cout lt lt value lt lt
  • 使用中央数据库在多用户环境中更新实体框架数据

    让我解释一下标题 我在应用程序中使用实体框架代码优先 测试应用程序 出于调试目的TestApp连接到 SQLExpress 数据库 中央数据库服务器 为了简单起见 数据库包含一张表 Products TestApp 在数据网格中显示数据库中
  • 创建文件时出现 System.UnauthorizedAccessException

    我试图编写代码以便记录错误消息 我试图用日期命名该文件 并希望每天创建一个新的日志文件 经过一番查看后 我得到了以下代码 class ErrorLog public void WriteErrorToFile string error ht
  • 为什么在字符指针上使用 strcat 会崩溃? [复制]

    这个问题在这里已经有答案了 为什么这段代码会崩溃 正在使用strcat字符指针非法 include
  • 更新 iframe、历史记录和 URL。然后使其与后退按钮一起使用

    当点击浏览器上的后退按钮时 我在更新 URL 时遇到问题 我正在 Firefox 上进行测试 更新我使用的 iframe 的 src 属性后replaceState更新历史记录 如果我在此之后点击后退按钮 iframe 将返回到上一页 但
  • opencart php自定义页面不使用“信息”功能

    我想在 opencart 中创建一个自定义页面 我知道我可以使用管理区域在信息部分放置一个自定义页面 但是我想要的是一个指向其他几个页面的控制器 我不完全明白如何做到这一点 在 codeigniter 中 您将创建一个控制器和一个视图 如果
  • Python:更改 Windows 7 主音量

    我希望能够在 Python 中控制主音量 不是针对应用程序 而是针对当前活动扬声器 这似乎是一个棘手的话题 我尝试用 C 来做 但我什至无法让它在那里工作 有办法做到这一点吗 Windows 7 x64 请注意 这个问题之前没有得到回答 因
  • Camera2 API 自动对焦与三星 S5

    我正在 Samsung S5 上使用新的 Camera2 API 该设备报告的支持的硬件级别是LEGACY 这很好 但是 我似乎无法自动对焦该设备 触发自动对焦的请求如下所示 previewRequestBuilder set Captur
  • 拒绝使用ajax调用Rest服务器设置不安全标头“Cookie”

    我正忙于构建一个与我的 Drupal Rest 服务器 模块 服务 连接的 Phonegap 应用程序 我的 Drupal 网站 PHP 的代码为 header Access Control Allow Origin 当我尝试使用以下代码连
  • cxf + wss4j + maven NoSuchMethod 错误

    尝试使用maven使用cxf wss4j 创建服务和客户端 没有任何编译问题 该服务在tomcat中运行良好 Issue 当我运行客户端代码时 我得到 java lang NoSuchMethodError org apache xml s
  • Apache Oltu Linkedin 集成示例

    我期待着开发Spring MVC Apache Oltu Linkedin集成示例 在此示例中 您需要发送客户端 ID 和客户端密钥才能从链接站点访问私有资源 第一步 我们需要在 Linkedin 中创建应用程序 请按照以下步骤操作 htt
  • laravel“解析错误:语法错误,意外的'const'(T_CONST),期望变量(T_VARIABLE)”

    我将我的 laravel 项目从本地移动到共享主机 但 laravel 给出了这个错误 Parse error syntax error unexpected const T CONST expecting variable T VARIA
  • 如何在 Laravel 4 中创建自定义 Facade

    查找了一些关于 Facades 和 Laravel 4 的教程 尝试了一些 不喜欢它们的工作方式 例如 它们并不都提供一种定义在哪里存储外观文件和服务提供者的方法 我试图摆脱这一点 但我的头撞到了几堵墙 直到我决定做这个线程 所以 假设我有
  • WinSCP .NET 程序集:在哪里定义代理?

    我可以使用 WinSCP GUI 定义代理服务器 如果我这样做 我就可以连接到远程主机 但在代码中我没有找到为 WinSCP 声明代理服务器的方法 在这种情况下我收到 远程服务器返回错误 407 需要代理身份验证 My code Sessi
  • 将 csv 文件转换为 PHP 二维数组

    我是 PHP 新手 一直在努力将 CSV 文件读入二维数组 我使用以下文件 csv team csv ID Nickname Shirtnumber Position 1 Jimmy 0 RightBack 2 Mark 3 CentreB
  • Hibernate/JPA - 访问 SingularAttribute 参数时出现 NullPointerException

    我正在尝试将 JPA2 类型安全标准查询与 Hibernate 5 0 7 Final 一起使用 criteria where builder equal root get SingularAttribute attr value wher