2016-03-21 10 views
2


crud depo Benim arayüzü: Ben bulundukları kütüphanenin id tarafından kitap varlıkların listesini almak istiyorum
Bahar crud depo sıralama

public interface BookRepository extends CrudRepository<BookEntity, String> { 

    List<BookEntity> findByLibraryIdOrderByNumberAsc(long libraryId); 
} 

, fakat aynı zamanda sayı olarak adlandırılan bazı alanlara göre sıralama yaparız. Bu, bir dizedir ('ISBN-12356' gibi görünebilir) ve artan sırada sıralanır ancak sipariş aynı zamanda büyük/küçük harfe duyarlı değildir.

bu kullanarak SQL yapılabilir varsayalım

select * from Books where libraryId = ? order by lower(number) ASC 

katılan yerli SQL özel bir tanımı yoktur, yöntem adlarını kullanarak elde edilebilir Bahar Crud repsoitory bu herhangi bir eşdeğer var mı?

Yardımlarınız için teşekkürler.

public interface BookRepository extends CrudRepository<BookEntity, String> { 

    @Query("select books from BookEntity books where libraryId = ?1 order by lower(number) ASC") 
    List<BookEntity> findByLibraryIdOrderByNumberAsc(long libraryId); 
} 
+0

Doğru yaptığından emin olmak için, herhangi bir "Query" anno'su kullanarak bu işlevselliği elde etmek istiyorsunuz. Tation ve sadece yöntem adı sözleşmesi ile? Ve 'findByLibraryIdOrderByNumberAsc' ile sonucu elde etmek mümkün ancak bunun yerine bir durumda hassas arama sonuçlanır? Ve sen de durumun duyarsız olmasını istiyorsun. Bu mu? –

cevap

4

Sana JPQL sorgusu oluşturmak gerekir tahmin Bu gibi görünen bir sıralama nesnesi:

public static final Sort SORT_BY_NUMBER = new Sort(new Sort.Order(Sort.Direction.ASC, "number").ignoreCase()); 
+0

Çözümü kullanacağım çözüm, bir sıralama nesnesi almayı beklerken, çözüm yalnızca "iş mantığı" tarafından gerekli parametreyi ortaya çıkardığı için bundan sonum olacak. –

1

aşağıdaki kullandığını bulundu çözüm:

List<BookEntity> findByBookId(long libraryId, Sort sort); 

Ve sonra bu yöntemi kullanmak için kullanabileceğiniz