当前位置: 首页 > 知识库问答 >
问题:

指定NULLS LAST在@OneTo众多映射集合的@OrderBy中

韩禄
2023-03-14

我有这样一个映射实体:

@OneToMany(targetEntity = Child.class)
@JoinColumn(name = "PARENT_ID", referencedColumnName = "PARENT_ID")
@OrderBy("orderNumber")
private List<Child> children;

我想在映射集合的@OrderBy注释中指定NULLS LAST

我使用的是Oracle数据库,它认为空值大于任何非空值。问题是在我的集成测试中,它使用h2数据库,似乎对空值的评估不同。

到目前为止,我想出了一个在@OrderNumber内部使用nvl2()函数的方法,如下所示:

@OrderBy("nvl2(orderNumber, orderNumber, 100000000)")

这个黑客可以工作,但是它看起来很讨厌,我不喜欢仅仅因为集成测试就有这个代码的想法。正如我上面提到的,Oracle默认情况下以正确的顺序返回行,所以基本的@OrderBy(orderNumber)不处理空值效果很好。另一方面,我想测试它,以防应用程序将使用不同的数据库。

有没有办法更好地解决这个问题?

共有1个答案

胡利
2023-03-14

要在H2中启用Oracle兼容性模式,需要将; MODE=Oracle;DEFAULT_NULL_ORDERING=HIGH附加到JDBC URL,如留档:https://h2database.com/html/features.html#compatibility

DEFAULT_NULL_ORDERING设置会更改NULL值的默认顺序(当既不使用NULLS FIRST也不使用NULLS LAST时)。有四种可能的选项,LOW是默认选项。

如果不需要此兼容模式,可以单独使用此设置。

 类似资料:
  • 我有一个与@OneToMany有关系的学生班级,比如下面的班级 和类实体: 我使用MapStruct将dto转换为实体,并将实体转换为dto: 学生地图绘制员。JAVA 类映射器。JAVA 这些映射器扩展了简单的EntityMapper接口 生成StudentMapperImpl。班 当我试图将学生DTO转换为学生DTO类中填充了class Id的学生实体时,一切都很好。当学生DTO中的class

  • 我使用的是spring boot starter数据jpa 1.5.1。内部使用hibernate core 5.0.11的版本。最终的 我的实体看起来像这样: 区域 节日的 行动 我试图理解以下观点: > 我的映射是准确的,还是应该使用多重映射来处理这种关系,因为一个区域可以有多个节日,每个节日可以有多个动作 背景:如果我将fetch类型从LAZY改为eanger,就会出现以下错误。希望能够理解

  • 主要内容:集合类型,以下是纠正/补充内容:集合(Collection)是一个将多个对象分组为一个单元的java框架。它用于存储,检索和操作汇总数据。 在JPA中,可以使用集合来持久化包装类和String的对象。JPA允许三种对象存储在映射集合中 - 基本类型,实体和嵌入式类型。 集合类型 根据要求,我们可以使用不同类型的集合来持久化对象。如下所示 - List Set Map 包中包含集合框架的所有类和接口。 以下是纠正/补充内容: 根据

  • 问题内容: 我在使用JPA(Hiberante提供程序)映射自定义集合时遇到问题。例如,当我使用带有属性的对象时 与 在我的ORM文件中,没关系;但是如果我替换 “列表匹配项”; 通过 ,其中 “匹配” 的定义如下: 它产生以下错误: 感谢您的关注! 问题答案: 可以,但是您必须将其称为常见集合之一- 或。 所以: 为什么?例如,因为Hibernate对您的集合进行代理以启用延迟加载。所以它创建,

  • 这是我的哈希图: 如何获得一个新的,它将包含每个客户的汽车数量,即的大小? 我想这样做没有循环,但只使用流。 我的尝试:

  • 编辑问题以包括所需的行为、特定的问题或错误,以及重现问题所需的最短代码。这将帮助其他人回答这个问题。 这是我的哈希映射: 如何获得一个新的,它将包含每个客户的汽车数量,即的大小? 我想不使用循环,但只使用流。 我的尝试: