Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java QueryDSL排序无法处理Spring数据_Java_Hibernate_Spring Data_Spring Data Jpa_Querydsl - Fatal编程技术网

Java QueryDSL排序无法处理Spring数据

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

我目前正在SpringDataCommons 1.9.1和SpringJPA1.7.1中使用
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