我使用Spring 4.1.6和QueryDSL 3.7.4。春季查詢dsl:如何按兩個數據庫字段排序,其中一個是外鍵?
我用Telosys工具創建了我的實體,我的QueryDSL實體創建了the apt-maven-plugin。
我沒用過的@Query標籤,因爲我覺得如果我這樣做,我不能讓一個頁結果,和性能方面的原因,我必須這樣做沒有@Query註釋(也許我對此感到困惑)。
我把這裏的我的實體代碼片段:
IncidenciasEntity.java:
@ManyToOne
@JoinColumn(name = "ID_TIPO_INCIDENCIA", referencedColumnName = "ID_TIPO_INCIDENCIA")
private TiposIncidenciasEntity tiposIncidencias;
TiposIncidenciasEntity.java
//----------------------------------------------------------------------
// ENTITY PRIMARY KEY (BASED ON A SINGLE FIELD)
//----------------------------------------------------------------------
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="ID_TIPO_INCIDENCIA", nullable=false)
private Integer idTipoIncidencia ;
我的Web應用程序工作正常,但有一件事我無法實現:我想對大型MySQL表的輸出進行排序和分頁,其中我想排序的一個字段是外鍵。我已經進行了兩個方法:
方法1:
public Page<IncidenciasEntity> obtenerPaginaIncidenciasOrdenYPaginacionInicial(int paginaMas1,
int numIncidencias)
{
OrderSpecifier<Integer> sortOrder1 = QIncidenciasEntity.incidenciasEntity.idIncidencia.asc();
OrderSpecifier<Integer> sortOrder2 = QIncidenciasEntity.incidenciasEntity.tiposIncidencias().idTipoIncidencia.asc();
QSort qsort = new QSort(sortOrder1, sortOrder2);
return incidenciasRepo.findAll(new QPageRequest(paginaMas1 - 1, numIncidencias, qsort));
}
方法1產生錯誤:沒有財產idTipoIncidencia發現型IncidenciasEntity!
方法2(無QueryDSL,只是春季數據JPA):
public Page<IncidenciasEntity> obtenerPaginaIncidenciasOrdenYPaginacionInicial(int paginaMas1,
int numIncidencias)
{
Order criterioOrdenacion1 = new Order(Direction.ASC, "idIncidencia");
Order criterioOrdenacion2 = new Order(Direction.ASC, "tiposIncidencias.idTipoIncidencia");
Sort criterioOrdenacionMixto = new Sort(criterioOrdenacion1, criterioOrdenacion2);
return incidenciasRepo.findAll(
new PageRequest(paginaMas1 - 1, numIncidencias, criterioOrdenacionMixto));
}
方法2不顯示任何錯誤,但不是由場排序idTipoIncidencia因爲我想。
注意:我不想僅使它工作QueryDSL,我想使它工作,無論如何,即使有一個jpa存儲庫。