java - CASE WHEN 在 Hibernate @OrderBy 注解中

标签 java hibernate jpa jpa-2.0

是否可以在 Hibernate @OrderBy 注释中使用 CASE WHEN ... END 甚至原生 SQL?怎么办?

例如(Child 对象有一个 type 属性):

@OneToMany
@OrderBy("CASE WHEN type='GIRL' THEN 1 WHEN type='BOY' THEN 2 ELSE 3 END ASC")
private List<Child> children;

最佳答案

@OrderBy 注解实际上是一个 JPA 注解,它接受实体上以逗号分隔的字段名称列表以进行排序。该顺序仅在对数据库的初始查询时执行,并且如果列表被修改则不会被维护。所以简而言之,不,你不能为 @OrderBy 注释提供纯 SQL。

一种解决方法是创建一个 View ,其中包含一个包含案例语句结果的附加列。例如:

create or replace view V_CHILD as
   select
   NAME VARCHAR2,
   TYPE VARCHAR2,
   CASE WHEN type='GIRL' THEN 1 WHEN type='BOY' THEN 2 ELSE 3 END as TYPE_ORDER
   from CHILD;

然后将实体映射到 View ,就像映射表一样。该实体将包含一个 typeOrder 字段,该字段可以在 @OrderBy 注释中指定。请注意,您无法插入或更新实体,因为它基于 View 。

关于java - CASE WHEN 在 Hibernate @OrderBy 注解中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19300911/

相关文章:

java - 如何使用 AES 方法解密加密列?

java - JPA - 实体未持久化

java - 在复杂对象中收集数据的良好设计模式

java - Confluent Cloud - Spring Boot Consumer REST Endpoint?

java - 使用 hibernate 进行遗留映射

hibernate - 调用deleteallby方法时如何修复 'no entitymanager with actual transaction'?

java - Gradle 多项目传递依赖

java - 用GAE打包其他项目

spring - 具有 Spring Data 和 Spring JPA 的 Atomikos - 持久性问题

java - 为什么 Spring 的 @Configurable 有时有效,有时无效?