Java QueryDSL排序无法处理Spring数据
我目前正在SpringDataCommons 1.9.1和SpringJPA1.7.1中使用Java QueryDSL排序无法处理Spring数据,java,hibernate,spring-data,spring-data-jpa,querydsl,Java,Hibernate,Spring Data,Spring Data Jpa,Querydsl,我目前正在SpringDataCommons 1.9.1和SpringJPA1.7.1中使用JpaSort。我需要使用QueryDSL,因为 这是我的存储库 public interface DatasheetRepository extends JpaRepository<Datasheet, Long>, JpaSpecificationExecutor<Datasheet> 这是我为QueryDSL更改的内容: private Sort createSortFor
JpaSort
。我需要使用QueryDSL,因为
这是我的存储库
public interface DatasheetRepository extends JpaRepository<Datasheet, Long>, JpaSpecificationExecutor<Datasheet>
这是我为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 ) );
}
如果我将其更改为:
private Sort createSortForDatasheets()
{
return new QSort(QDatasheet.datasheet.name.desc());
}
然后,按“数据表”类型的名称按相反顺序排序就行了
这是我的“数据表”实体:
更新:
如果我将createSortForDatasheets
更改为:
private Sort createSortForDatasheets()
{
return new QSort( new OrderSpecifier<>( Order.ASC, QComponentType.componentType.id, OrderSpecifier.NullHandling.NullsLast ) );
}
注意如何使用“数据表”的id,而不是“ComponentType”的id。它看起来像Spring数据错误。我为此提交了一个问题这看起来像是Spring数据中的一个bug。我会调查的。虫子确认了。今天刚刚在git中修复:
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;
@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;
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