java specification排序_java-QueryDSL排序不适用于Spring Data

我目前正在将JpaSort与Spring Data Commons 1.9.1和Spring JPA 1.7.1结合使用.我需要使用QueryDSL,因为JPA does not allow defining the sort for null values.

这是我的资料库

public interface DatasheetRepository extends JpaRepository, JpaSpecificationExecutor

我正在我的控制器中执行此操作:

Page 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 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;

更新:

如果我将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

请注意如何使用“数据表”的ID,而不是“ ComponentType”的ID.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Querydsl进行排序时,可以根据需要使用各种过滤器、排序和分页功能。Querydsl提供了多种排序方法,例如使用orderBy方法对查询结果进行排序。具体实现的代码示例如下: ```java JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); QEntity entity = QEntity.entity; List<Entity> entities = queryFactory.selectFrom(entity) .where(...) .orderBy(entity.property.asc()) .fetch(); ``` 在这个例子中,我们使用了`orderBy`方法对查询结果按照某个属性进行升序排序。你可以根据具体的需求修改`orderBy`方法的参数,实现不同的排序方式,例如按照多个属性进行排序或者降序排序。 另外,Querydsl还提供了其他的排序方法,例如使用`orderBy`方法的`desc`方法进行降序排序。你可以根据具体的需求使用不同的排序方法来实现你想要的排序效果。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [querydsl-open:QueryDSL示例](https://download.csdn.net/download/weixin_42116791/18633566)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [queryDSL复杂查询的分页和自定义排序实现](https://blog.csdn.net/qq_42105629/article/details/101016589)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值