QueryDSL 排序不适用于 Spring Data

2023-12-22

我目前正在使用JpaSort使用 Spring Data commons 1.9.1 和 Spring JPA 1.7.1。我需要使用 QueryDSL 因为JPA 不允许定义空值的排序 https://stackoverflow.com/questions/23897376/jpasort-using-nulls-last-with-spring-data.

这是我的存储库

public interface DatasheetRepository extends JpaRepository<Datasheet, Long>, JpaSpecificationExecutor<Datasheet>

我在我的控制器中这样做:

Page<Datasheet> page = m_datasheetRepository.findAll( new PageRequest( pageNumber, pageSize, createSortForDatasheets() ) );

这就是我对 JPA 的看法:

private Sort createSortForDatasheets()
{
    // First sort on the component type name, then on the subtype name
    return new JpaSort( JpaSort.path( Datasheet_.componentSubtype ).dot( ComponentSubtype_.componentType ).dot( ComponentType_.name ) )
            .and( new JpaSort( JpaSort.path( Datasheet_.componentSubtype ).dot( ComponentSubtype_.name ) ) );
}

这是我为 QueryDSL 所做的更改:

private Sort createSortForDatasheets()
{
    return new QSort( new OrderSpecifier<>( Order.ASC, QDatasheet.datasheet.componentSubtype.componentType.name,OrderSpecifier.NullHandling.NullsLast ) )
            .and( new OrderSpecifier<>( Order.ASC, QDatasheet.datasheet.componentSubtype.name, OrderSpecifier.NullHandling.NullsLast ) );
}

然而,似乎一切都没有得到解决。我已启用 DEBUG 日志记录,并且看到以下内容:

Rendered criteria query -> select generatedAlias0 from Datasheet as generatedAlias0 order by generatedAlias0.name asc, generatedAlias0.name asc

如果我把它改成:

private Sort createSortForDatasheets()
{
    return new QSort(QDatasheet.datasheet.name.desc());
}

然后按我的“数据表”类型的名称以相反的顺序排序就可以了。

这是我的“数据表”实体:

@Entity
public class Datasheet
{
// ------------------------------ FIELDS ------------------------------

    @Id
    @GeneratedValue
    private long id;

    @Column(unique = true)
    private String name;
    private String description;

    @ManyToOne
    private ComponentSubtype componentSubtype;

    @OneToMany(cascade = CascadeType.REMOVE)
    private Set<DatasheetDocument> documents;

这是“ComponentSubtype”:

@Entity
public class ComponentSubtype
{
    @Id
    @GeneratedValue()
    private long id;

    private String name;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "parent_id",insertable=false,updatable=false)
    private ComponentType componentType;

UPDATE:

如果我改变createSortForDatasheets对此:

private Sort createSortForDatasheets()
{
    return new QSort( new OrderSpecifier<>( Order.ASC, QComponentType.componentType.id, OrderSpecifier.NullHandling.NullsLast ) );
}

然后,日志显示:

Rendered criteria query -> select generatedAlias0 from Datasheet as generatedAlias0 order by generatedAlias0.id asc

请注意如何使用“Datasheet”的 id,而不是“ComponentType”的 id。


它看起来像 Spring Data 错误。我为此提出了一个问题https://jira.spring.io/browse/DATACMNS-621 https://jira.spring.io/browse/DATACMNS-621

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

QueryDSL 排序不适用于 Spring Data 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • .gitmodules 和在 .git/config 中指定子模块之间的区别?

    可能是非常愚蠢的问题 但到目前为止我一直在 gitmodules 文件中指定子模块 最近我突然想到 也许出于同样的原因可以使用 git config 这样我就不必在工作目录中保留无关的文件了 git config submodule pat
  • 信息窗口在 didTapAtCoordinate 方法中不显示标记

    我想展示infowindow and marker两者同时进行 code void set markerOnMap double lat longitude double lon GMSMarker marker GMSMarker all
  • 在 cypress.env.json 中定义变量

    我想为所选应用程序的测试定义全局变量 我想将它们输入到一个文件中 阅读完文档后我决定使用cypress env json https docs cypress io guides guides environment variables h
  • 修复 Mercurial 中的错误合并

    在我们的 Mercurial 项目配置中 我们在一个存储库中有 3 个分支 一种是稳定版本分支 其中完成紧急错误修复 一种是包含新功能代码的功能分支 一种是 UAT 分支 其中错误修复和新功能合并以提供最新的代码库 我们已将大量新功能代码合
  • 使用 Perl 提取方括号“[]”之间的数据

    我使用正则表达式从弯曲的括号 或 括号 中提取数据 例如提取a b from a b 如下所示 我有一个文件 其中每一行都会像 this is the range of values a1 b1 and b1 a1 this is the
  • PowerShell 无法确定正在使用哪个参数集

    我有一个带有四个参数的函数 其中两个可以设置也可以不设置 我尝试使用参数集来确定已设置哪些参数 但在参数集解析方面遇到了一些问题 这些是四个可能的参数集 既不是ErrorObject也不是SplunkData 错误对象和 Splunk 数据
  • 什么是核心动画的字节对齐(缓存行对齐)?为什么这很重要?

    我以非惰性方式在滚动视图上加载图像 因此不会出现卡顿行为 代码有效 FPS 接近 60 但是 我不明白什么是核心动画的字节对齐 或缓存行对齐 如上所述here https github com path FastImageCache byt
  • SocketIO,无法从客户端发送发射数据

    我在尝试使用 SocketIO 将数据从客户端浏览器发送到我的节点服务器时遇到了最奇怪的问题 从服务器发送到客户端工作得很好 但反过来我会得到一个未定义的错误 这是它的快速外观 非常简单 节点服务器 app js io on connect
  • 如何使用纯 JavaScript 防止输入字段中出现空格

    我有一个用户名输入字段 并试图阻止用户用空格填充它们
  • jQuery - 使用 AJAX 加载内容时 document.ready 不会触发

    我有一个简单的自定义选项卡模块 它使用 AJAX 请求加载选项卡 通过 elem load 在每个使用 AJAX 加载的页面上 我都有一些 JavaScript 第一次加载页面时 通过直接输入 URL 而不是 AJAX JavaScript
  • 将 NSManagedObject 存储在字典中(NSDictionary)

    我有一个自定义类 它是NSManagedObject 我想将其存储在字典中 但是当尝试这样做时 我收到了Property list invalid for format 200 error 这是我尝试创建字典的方法 NSDictionary
  • C# 中继承的性能注意事项

    如果我使用以下命令创建一个类 编译器是否会生成相同的 ILpublic int I 或任何其他字段 与创建一个从具有以下属性的基类继承的类public int I 无论哪种方式 生成的类的行为都是相同的 但是编译器的行为是否相同 即 编译器
  • 为什么在 IntelliJ 14+ 上运行简单的 scala 程序时会出现 ClassNotFoundException?

    我无法弄清楚这个程序出了什么问题 我正在使用旧版本的 scala 2 7 因为它与我正在使用的某些库兼容 这是我尝试运行的一个简单程序 该程序运行良好使用scalac and scala命令 但是在 IntelliJ 14 上 gt 当我c
  • 如何在Python中分割文件?

    是否可以分割文件 例如 您有一个巨大的单词列表 我想将其拆分 使其成为多个文件 这怎么可能 这个用换行符分割文件并将其写回 您可以轻松更改分隔符 如果您的输入文件中没有多个 splitLen 行 本例中为 20 行 这也可以处理不均匀的数量
  • EF core“点赞”功能的动态表达

    我编写了一些代码来创建动态表达式来过滤我的分页 我正在尝试制作 EF Core 内置函数的动态表达式以进行搜索 EF Functions Like 我尝试过像bottom这样的方法 但它是一种扩展方法 调用该方法时不使用第一个参数 我不知道
  • 使用 ObjectMapper + JavaTimeModule 将 JacksonJsonProvider 注册到 Jersey 2 客户端

    我正在尝试整理包含 ISO 格式时间戳的响应 如下所示 time 2014 07 02T04 00 00 000000Z into ZonedDateTime我的域模型对象中的字段 最终 如果我使用以下代码片段中注释的解决方案 它就会起作用
  • 使用java图形沿着圆弧路径移动形状

    请原谅我的天真 这是我第一次来这里 也是第一次用java处理图形动画 我正在尝试完成一个沿某种弧线移动的星形动画 尝试模拟二维轨道 轨道动作与计时器一起使用来为星星设置动画 简单来说 我在jpanel的不同位置画了几颗星星 星星 y 位置的
  • ViewPagerIndicator - 将 TabPageIndicator 设置为中心

    I make an timetable application for android and I m using ViewPagerIndicator https github com JakeWharton Android ViewPa
  • 注册页面不会将数据插入数据库

    不知道为什么 但是当我点击注册表单上的提交时 它不会将数据插入数据库 它通过重定向到注册成功页面来执行底部的最后一个 else 语句 这让我感到困惑 我可以正常工作 但我做了一些事情 但我不知道出了什么问题
  • QueryDSL 排序不适用于 Spring Data

    我目前正在使用JpaSort使用 Spring Data commons 1 9 1 和 Spring JPA 1 7 1 我需要使用 QueryDSL 因为JPA 不允许定义空值的排序 https stackoverflow com qu