java - QueryDSL sorting not working with Spring Data -


i using jpasort spring data commons 1.9.1 , spring jpa 1.7.1. need use querydsl because jpa not allow defining sort null values.

this repository

public interface datasheetrepository extends jparepository<datasheet, long>, jpaspecificationexecutor<datasheet> 

i doing in controller:

page<datasheet> page = m_datasheetrepository.findall( new pagerequest( pagenumber, pagesize, createsortfordatasheets() ) ); 

this had jpa:

private sort createsortfordatasheets() {     // first sort on component type name, on 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 ) ) ); } 

this have changed 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 ) ); } 

however, nothing seems sorted. have enabled debug logging , see this:

rendered criteria query -> select generatedalias0 datasheet generatedalias0 order generatedalias0.name asc, generatedalias0.name asc 

if change to:

private sort createsortfordatasheets() {     return new qsort(qdatasheet.datasheet.name.desc()); } 

then sorting name of "datasheet" type in reverse order work.

this "datasheet" entity:

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

and "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:

if change createsortfordatasheets this:

private sort createsortfordatasheets() {     return new qsort( new orderspecifier<>( order.asc, qcomponenttype.componenttype.id, orderspecifier.nullhandling.nullslast ) ); } 

then, logging shows:

rendered criteria query -> select generatedalias0 datasheet generatedalias0 order generatedalias0.id asc 

notice how id of "datasheet" used, , not id of "componenttype".

it looks spring data bug. filed issue https://jira.spring.io/browse/datacmns-621


Comments

Popular posts from this blog

java - Plugin org.apache.maven.plugins:maven-install-plugin:2.4 or one of its dependencies could not be resolved -

Round ImageView Android -

How can I utilize Yahoo Weather API in android -