Java - 标准 API - 在 JPA 之外使用
Java - criteria API - usage outside of JPA
我正在使用 JPA 2.1 并尝试引用 JPA 范围之外的元模型,作为获取给定 class 字段名称的简单方法。但是,当我这样做时,我最终得到了一个 NPE:
System.out.println("attribute:" + Job_.id.getName());
我期待在 stdout 中得到 "attribute:id",但我却得到了 NPE。如果我在标准查询中使用相同的内容(根据 id 进行过滤),我会得到我期望的结果。
Job_ class 没什么特别的,它只是一个静态的 class,我应该可以参考。如果我看一下我是如何使用标准 API 的,它是相同的。我传入一个 Attribute 或 SingularAttribute 并告诉 JPA 我想过滤什么属性。
我应该能够做到这一点,还是我做错了什么?
静态元模型中的字段由您的 JPA 提供程序(hibernate、eclipselink...)在运行时填充。
有一种方法可以使用 SerializedLambda 通过 lambda 表达式获取 属性 名称。
看看这个:https://github.com/benjiman/lambda-type-references
还有这个:http://benjiweber.co.uk/blog/2013/12/28/typesafe-database-interaction-with-java-8/
我正在使用 JPA 2.1 并尝试引用 JPA 范围之外的元模型,作为获取给定 class 字段名称的简单方法。但是,当我这样做时,我最终得到了一个 NPE:
System.out.println("attribute:" + Job_.id.getName());
我期待在 stdout 中得到 "attribute:id",但我却得到了 NPE。如果我在标准查询中使用相同的内容(根据 id 进行过滤),我会得到我期望的结果。
Job_ class 没什么特别的,它只是一个静态的 class,我应该可以参考。如果我看一下我是如何使用标准 API 的,它是相同的。我传入一个 Attribute 或 SingularAttribute 并告诉 JPA 我想过滤什么属性。
我应该能够做到这一点,还是我做错了什么?
静态元模型中的字段由您的 JPA 提供程序(hibernate、eclipselink...)在运行时填充。
有一种方法可以使用 SerializedLambda 通过 lambda 表达式获取 属性 名称。
看看这个:https://github.com/benjiman/lambda-type-references 还有这个:http://benjiweber.co.uk/blog/2013/12/28/typesafe-database-interaction-with-java-8/