使用 CriteriaBuilder 在 Java 中获取列表的 IllegalStateException

2023-11-22

总结一下,我有 3 个实体,主要的一个是名为“Rac”的实体。它包含“RacNatureza”列表,其中包含属性“Natureza”。

Rac

    @Entity
    @Table(name = "rac")
    public class Rac {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idRac;    

    @OneToMany(mappedBy = "rac", cascade = {CascadeType.ALL}, orphanRemoval = true)
    @JsonManagedReference //para evitar recursão infinita do JSON
    private List<RacNatureza> racNaturezas;

    //...getters and setters ok
}

自然奇观

@Entity
@Table(name = "rac_natureza")
public class RacNatureza implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_rac_natureza")
    private Long idRacNatureza;

    @ManyToOne
    @JsonBackReference //coloquei para evitar a recursao infinita de JSON
    @JoinColumn(name="id_rac")
    private Rac rac;

    @ManyToOne
    @JoinColumn(name="id_natureza")
    private Natureza natureza;

    @Column(name = "principal")
    private Boolean principal;
}

Natureza

@Entity
@Table(name = "natureza")
public class Natureza {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_natureza")
    private Integer idNatureza;
    private String descricao;

    @OneToMany(mappedBy = "natureza", fetch = FetchType.EAGER, orphanRemoval = true)
    @JsonIgnore
    private List<RacNatureza> racNatureza;
}

我正在尝试使用过滤器开发搜索,在本例中,用户选择“Natureza”列表,然后系统必须显示哪些“Rac”包含用户选择的 Natureza。为此,我尝试使用 Entitymanager 和 Criteriabuilder 来实现。

我尝试编写这样的表达式但不起作用(我没有使用元模型):

@PersistenceContext
private EntityManager entityManager;

@Override
public List<Rac> filtrar(RacFilter racFilter) {
    CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    CriteriaQuery<Rac> criteria = builder.createQuery(Rac.class);
    Root<Rac> root = criteria.from(Rac.class);

    Predicate[] predicates = criarRestricoes(racFilter, builder, root);
    criteria.where(predicates);

    TypedQuery<Rac> query = entityManager.createQuery(criteria);
    return query.getResultList();

}

@Override
public Predicate[] criarRestricoes(RacFilter racFilter, CriteriaBuilder builder, Root<Rac> root) {
    List<Predicate> predicates = new ArrayList<>();
    if (racFilter.getNaturezas() != null) {
        predicates.add(
                builder.equal(root.<List<RacNatureza>>get("racNaturezas").<Natureza>get("natureza"), racFilter.getNaturezas()) );
    }   
    return predicates.toArray(new Predicate[predicates.size()]);
}

因此,使用上面的代码我收到以下错误:引起原因:java.lang.IllegalStateException:非法尝试取消引用基本类型的路径源 [null.racNaturezas]

我相信错误就在这一行,但我真的不知道如何修复它:

    predicates.add(
            builder.equal(root.<List<RacNatureza>>get("racNaturezas").<Natureza>get("natureza"), racFilter.getNaturezas()) );
}   

Replace root.get("racNaturezas") with root.join("racNaturezas")

请不要问我为什么我们不能使用get

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 CriteriaBuilder 在 Java 中获取列表的 IllegalStateException 的相关文章

  • 使用 Hibernate 用瞬态对象更新持久对象

    每天 数据都是通过网络服务导入的 我创建一个新的 暂时的 实例我通过 JPA 注释在 hibernate 中映射的 pojo 的 我将数据从 Web 服务填充到瞬态实例中 我从数据库加载持久对象 我想用瞬态实例中的数据更新该持久对象 我以某
  • 有效地将三个字母的货币名称转换为符号名称(例如 20 美元到 20 美元)

    我有一个格式化的字符串 它等于USD 20 我想把它转换成 20 我怎样才能高效地做到这一点 我应该使用正则表达式来执行此操作 但由于区域设置发生变化 国家 地区 ISOCode 也会发生变化 你需要的是这个 import java uti
  • 合并 2 个 .jks 信任库文件

    我正在使用启用了 SSL 的 Tomcat 并使用信任库进行客户端身份验证 我有两个 jks trustore 文件 第一个 我将其用于 PROD 环境 另一个用于 TEST 环境客户端证书 我在 Tomcat 上部署了 Web 应用程序
  • 配置 Eclipse 将 App Engine 类预先捆绑到单个 JAR 中以加快预热速度

    在与另一家同样使用 App Engine 的公司的同事进行讨论后 他告诉我 他通过以下步骤成功地将应用程序预热时间从约 15 秒缩短到约 5 秒 配置 Eclipse 将编译过程中生成的类捆绑到单个 JAR 文件中 配置 Eclipse 以
  • import java 导入错误:没有名为 java 的模块

    我似乎遇到了障碍 根本无法解决这个问题 任何人都可以帮我弄清楚为什么我无法导入 java 模块吗 Error Traceback most recent call last File datasource config py line 3
  • 如何创建仅接受字母数字字符的正则表达式? [复制]

    这个问题在这里已经有答案了 可能的重复 字母数字和下划线的正则表达式 https stackoverflow com questions 336210 regular expression for alphanumeric and unde
  • 如何确定 JDialog 显示在哪个屏幕上

    我有一个非常大的应用程序 有多个对话框 我的任务是确保不完全可见的对话框 因为用户将其从可见屏幕区域拉出 移回屏幕中心 当我只处理一个屏幕时 这没问题 它工作得很好 但是 该应用程序的大多数用户的桌面上都有两个屏幕 当我尝试找出对话框显示在
  • 在 alpine / Jprofile 10 中运行 jpenable 时出现 UnsatisfiedLinkError

    当运行 jpenable 以允许在运行 JDK 8 的 alpine 3 3 容器中对 Jprofiler10 进行分析时 我收到 UnsatisfiedLinkError 异常 有任何想法吗 ERROR The agent could n
  • 如何防止我的 servlet 被其他网站调用

    好的 我有一个像这样的简单的 servlet public class SimpleServlet extends HttpServlet public void doPost HttpServletRequest req HttpServ
  • 字符串 a == 字符串 b 的规则 [重复]

    这个问题在这里已经有答案了 我试图了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是什么 例如这个片段 public static void main String hi String s1 lol String s2 lol S
  • 覆盖乔达一周的第一天?

    是否有可能覆盖乔达弱的第一天sunday 因为 Joda 使用Monday作为一周的第一天 如果有办法的话 谁能解释一下 我在 SOF 中提到了以下主题 乔达时间 一周的第一天 https stackoverflow com questio
  • 相对重力

    我最近开始使用jMonkey引擎 这非常好 但我在尝试实现相对重力时陷入了困境 我想让行星彼此围绕轨道运行 不一定是完美的圆形轨道 取决于速度 所以每个对象都应该影响其他对象 我现在拥有的 关闭全球重力 bulletAppState get
  • org.apache.poi 中的异常

    我试图编写一个可以读取和写入的程序 xlsx文件中 下面提供的代码旨在能够编写其第一个 Excel 程序 package excel reader import java io FileOutputStream import java io
  • 更改JavaFX TableView字体大小[重复]

    这个问题在这里已经有答案了 您好 我想在表视图列内的文本上设置字体 我如何用 Java 做到这一点 这是我的代码 感谢帮助 private final TableView
  • Java 日期和 MySQL 时间戳时区

    我正在编辑一段代码 其基本功能是 timestamp new Date 然后坚持下去timestamp中的变量TIMESTAMPMySQL 表列 然而 通过调试我看到Date显示在正确时区的对象 GMT 1 当持久化在数据库上时 它是GMT
  • 如何让 Camel FTP 按需只获取一次

    我对骆驼还很陌生 我一直在尝试让 Camel 根据需要仅通过 FTP 获取单个文件一次 我无法让它发挥作用 这是我尝试过的 让我知道什么是最好的方法以及我的代码有什么问题 1 读取文件后发送一条空消息当收到空消息时 停止路由 from di
  • 致命异常:OkHttp 调度程序

    我在 Android 应用程序中使用 OkHttp 库向天气 API 发出 Web 请求 我已经实现了我的代码 但在执行请求时遇到了致命异常 我也已经在我的清单中添加了互联网权限 MainActivity java private Curr
  • 使用替换但不使用根元素的 Jaxb 继承

    我正在浏览布莱斯的博客http blog bdoughan com 2010 11 jaxb and inheritance using substitution html http blog bdoughan com 2010 11 ja
  • CreateProcess error=206,运行 gwtCompile 时文件名或扩展名太长

    我的应用程序是一个 springboot gradle 应用程序 我的应用程序的一部分涉及使用 gradle 进行遗留 gwt 编译 它工作正常 但今天当我运行下面的 gradle 任务时 它显示 CreateProcess error 2
  • 如何使用 iBatis (myBatis) 的注释进行 IN 查询?

    我们只想在 MyBatis 中使用注释 我们确实在努力避免使用 xml 我们尝试使用 IN 子句 Select SELECT FROM blog WHERE id IN ids List

随机推荐

  • MySQL 中的 UTF8 字符串比较

    我们在 MySQL 5 中遇到有关大小写和重音的 utf8 字符串比较问题 根据我收集的信息 MySQL 通过考虑 字符组应该被视为相等 来实现排序规则 例如 在utf8 unicode ci排序规则中 所有字母 E e 都在同一个框中 以
  • 在 Android 操作系统中将 JPEG/PNG 图像转换为 TIFF 图像格式

    我正在开发一个应用程序 其中需要 TIFF 格式的图像 但在 Android 中 您可以将位图 图像转换为仅 JPEG PNG 图像 有没有在android上将JPEG PNG文件转换为TIFF格式的好方法 Android 不支持 java
  • matplotlib 颜色条的位置和大小

    我在用着quadmesh创建一个简单的极坐标投影图 这是一个最小的脚本 它基本上产生了我想要做的事情 from future import unicode literals import numpy as np import matplot
  • .NET 有 XmlEncode / XmlDecode 吗?

    有没有方法encoding and decoding XML在 NET 中 我似乎无法找到它们 并且想知道为什么它们不存在以及可以使用什么来代替 我需要对 XML 文档进行编码并将其传递给 Web 服务上的字符串参数 然后需要在另一端对其进
  • 检查 WPF DataGrid 单元是否有错误

    我在单元格上设置了验证 它按预期工作 在文本框周围放置红色突出显示并添加带有错误的工具提示 但是 如果我尝试访问 Validation GetHasError TheGrid 其中 TheGrid 是我的 DataGrid 它始终为 fal
  • 如何防止Web服务API中的并发?

    我们有三个网络服务 a b c 其中每个服务映射到一个方法 go 在一个单独的 Java 类中 ClassA ClassB ClassC 同一时间只能运行一项服务 即 b无法运行 a在跑 然而 由于这是一个 REST API 因此无法阻止客
  • 调试区域中显示的信息过多 - Xcode 8

    我刚刚升级到 Xcode 8 在构建和运行我的项目时 大量信息被打印到调试区域 这是一个示例 016 09 14 08 37 54 394736 SmartTapp 8645 112431 子系统 com apple network 类别
  • 与 getDerivedStateFromProps 中之前的 prop 进行比较

    想象一个具有 prop name 和 state elapse 的组件 new Component name gt Hi name It s been elapse seconds elapse 当 prop 时应重置为 0 name 变化
  • Java 导入与代码性能

    我想知道我是否包含了很多import在我的java程序中 它会影响我的代码的性能 例如 程序会变慢 背后的逻辑是import在Java中与include in C 它会影响我的代码的性能 例如 程序会变慢 不 它不会影响代码的性能 二进制文
  • 测量docker容器的执行时间

    我有一个名为my image启动命令并关闭 使用命令在容器中运行图像时docker run rm my image 是否可以测量容器的执行时间 Edit 我需要在容器执行后查看这些计时信息 因此我无法使用time命令 我以某种方式希望找到
  • 如何统计java中执行的字节码数量

    我要参加麻省理工学院的战斗代码竞赛 参赛者编写程序来控制互相战斗的机器人 问题是你的机器人每次只能执行一定数量的字节码 去年是每轮 10000 个 现在 一个简单的循环 喜欢 int i 0 i lt 100 i do nothing 根据
  • 在 C++ 中,类模板的显式特化定义应该放在哪里?

    根据 温度规格 5 对于给定的模板和给定的一组模板参数 一个明确的专业化在程序中最多定义一次 根据 基本 def odr and 类模板的显式 完整 特化的定义不能放在标头中 否则包含该标头的每个翻译单元中都有一个定义 因此整个程序中将有多
  • 如何在(子)模块中使用 __init__.py 定义命名空间?

    我的问题是关于编写 Python 3 x 包和 子 模块以及正确使用 init py文件来声明命名空间 我曾经用 C 编写代码 所以我喜欢使用很多单独的文件来组织项目 例如 imo 如果一个模块包含多个类 则每个类都应该位于单独的文件中 由
  • 安装和更新 Perl 模块为“通用”(x86_64、arm64)?

    是否可以安装和更新具有通用 x86 64 arm64 架构支持的 Perl CPAN 模块 如果是 那么如何 背景 在基于arm的macOS计算机上 可以为一个指定的架构安装Perl CPAN模块 如下所示 sudo cpan i Enco
  • WebStorm 和 PHPStorm 的区别

    我正在选择一个用于 Web 开发的 IDE 我想知道 WebStorm 和 PHPStorm 之间的区别是什么 我在 JetBrains 的网站上找不到任何要点 甚至 Google 也没有多大帮助 我现在所知道的是 PHPStorm 不像
  • 内联函数中的静态变量

    我有一个在头文件中声明和定义的函数 这本身就是一个问题 当该函数未内联时 使用该标头的每个翻译单元都会获得该函数的副本 并且当它们链接在一起时会出现重复 我通过使函数内联来 修复 这个问题 但恐怕这是一个脆弱的解决方案 因为据我所知 编译器
  • Scala Futures - 内置超时?

    我从官方教程参考文献中无法完全理解 futures 的一个方面 http docs scala lang org overviews core futures html scala 中的 future 是否有某种内置的超时机制 假设下面的示
  • 大量列的性能下降。派斯帕克

    我在处理 Spark 宽数据帧 大约 9000 列 有时更多 时遇到了问题 Task 通过groupBy和pivot创建宽DF 将列转换为向量并从 pyspark ml 处理为 KMeans 所以我制作了广泛的框架并尝试使用 VectorA
  • 如何使用 Visual Studio 2005 / resharper 自动向文件夹、命名空间或项目中的每个文件添加“using”语句

    我正在使用 resharper 进行大型重构 并且我不断从一个文件到另一个文件 并在 使用 部分中一遍又一遍地添加相同的名称空间 是否有办法向文件夹 命名空间或项目中的每个文件添加 using 语句 尽管有些文件不需要参考 但大多数文件都需
  • 使用 CriteriaBuilder 在 Java 中获取列表的 IllegalStateException

    总结一下 我有 3 个实体 主要的一个是名为 Rac 的实体 它包含 RacNatureza 列表 其中包含属性 Natureza Rac Entity Table name rac public class Rac Id Generate