我目前正在使用带有Spring Data commons 1.9.1和Spring JPA 1.7.1的JpaSort。我需要使用QueryDSL,因为JPA不允许为空值定义排序。
这是我的存储库
public interface DatasheetRepository extends JpaRepository<Datasheet, Long>, JpaSpecificationExecutor<Datasheet>
我在我的控制器中这样做:
Page<Datasheet> 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 ) );
}
然而,似乎什么都没有得到整理。我已经启用了调试日志记录,我看到了这一点:
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;
这是“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。
它看起来像Spring Data错误。我为它提出了一个问题https://jira.spring.io/browse/DATACMNS-621
我想将排序添加到PrimeFaces 3.3数据表并创建了以下ViewScoped bean,它存储列表,因此不会一直从EJB中获取: 这是使用bean的视图: 问题是,我可以单击列标题进行排序,但表仍然未排序,即使初始排序不起作用。当您在getList()方法中设置断点时,我可以看到在处理请求期间多次从EJB中提取列表。只要视图在ViewScope中处于活动状态,不应该存储bean吗?
Elasticsearch排序不适用于嵌套字段。它显示了升序和降序的混合值。比如40,30,50。它不是按升序显示的:30,40,50 查询:
这基本上与此相反:如何使用Spring JPA执行分页QueryDSL查询? 这是一个自定义查询,我不能使用任何findAll()方法。
我正在尝试实现一个类似问题的系统。这些问题应该根据数据属性“投票”重新排序。因此,每次从套接字接收到like事件时,都会调用sort函数。当一个问题第一次被喜欢时,所有的事情都很好,列表也被排序了。但它会停止排序。我已经检查了数据值。 下面是我的js功能:
当应用程序基于Spring Boot时,不考虑定义的实体图。相反,在JUnit测试期间,一切正常。 领域非常简单:书籍及其类别(多对多关系) 图书类: 类别类: 带有使用创建的实体图的方法的JPA存储库: REST控制器中的用法: 启动Spring Boot(mvn Spring Boot:run)并导航到http://localhost:8080/books书籍会被显示,但它们有各自的类别(由于