2014-10-15 30 views
11

Bir havuzda hem @Query hem açıklama hem de belirtim kullanılabilir mi?Bir Spring Data JPA deposu yönteminde bir @ Query tanımı ve Teknik özelliklerini birleştirebilir miyim?

@Query(value="SELECT e from EMPLOYEE where firstName <> ?1") 
public Page<Employee> findEmployeeBySomethigFancy(String firstName, Pageable pageable, Specification<Employee> emp); 

mümkün mü yoksa @Query ek açıklamayı bir Predicate olarak, tüm sorguyu oluşturmak ve kaldırması gerekir: Örneğin böyle bir yöntemi olmasını istiyorum?

cevap

8

İlk önce bunu blog post numaralı belgeden okumak isteyebilirsiniz. İkinci olarak, havuzlarını Özellikler kullanılarak aşağıdaki sorgular çalıştırabilir uygulamalıdır JpaSpecificationExecutor arayüzüne göre:

  • sayımı (Şartname Spec)
  • Liste findAll (Şartname Spec)
  • Sayfa findAll (Şartname spec sayfalanabilir sayfalanabilir)
  • Liste findAll sırala sort (Şartname spec)
  • T findOne (Şartname spec)

Dolayısıyla, @Query (veya sorgu yöntemleri) ve Spesifikasyonlarını karıştırmanız gerekmiyor. yerine Şartname kullanılarak

firstName <> ?1 

:

Bu durumun ifade edebilir. Ardından istediğiniz kadar çok özellikleri birleştirebilirsiniz.

+0

Cevabınız için teşekkürler! İstediğim kadar çok özelliği birleştirebileceğimi biliyorum, ancak * @ Query * ek açıklamaları ile birkaç yöntemim var ve şimdi Şartname'yi kullanmaya ihtiyaç var, bu yüzden var olan sorguları Specification'ın nesnelerine yeniden yazmam gerekiyor. Belki de bir şekilde * @ Query * ve Spesifikasyonu birleştirmenin bir yolu olduğunu düşündüm. – woytech

+0

API implementer bakış açısı için, bu endişeleri ayırmak ve belirli sorgulama olanakları sunmak çok daha kolaydır. Bunları birleştirmek, uygulamayı daha da karmaşıklaştırabilir. –

+2

Bu konu harika, JPA sorgu yönteminde çoktan çoğa katılmam gerekiyor ve Şartname ve Özelleştirilebilir öğeyi geçiyorum. Elbette @Query ile karıştırılamıyor (test ettim). Ve bu benim kupama cevap vermiyor. Bir ilişki tablosuna karşılık gelen sorgularımı almayı ve Şartname ve Hazırlanabilir öğelerimi tutmayı nasıl başaracağımı bilmiyorum :( – Alex

İlgili konular