2016-05-12 10 views
7

जैसा कि मैं उपयोगकर्ता तालिका में डेटा केस असंवेदनशील द्वारा डेटा खोजना चाहता हूं। अप्रत्याशित टोकन:%जेपीक्यूएल केस असंवेदनशील

@Repository 
public interface UserRepository extends JpaRepository<User, Long> { 

    @Query("select u from User u where lower(u.name) like %lower(?1)%") 
    public List<User> findByNameFree(String name); 

} 

मैं एक त्रुटि मिल गया। मुझे '%' कहां रखना चाहिए?

उत्तर

21

आप concat ऑपरेटर का उपयोग कर सकते हैं:

@Query("select u from User u where lower(u.name) like lower(concat('%', ?1,'%'))") 
public List<User> findByNameFree(String name); 

या एक नामित पैरामीटर के साथ:

@Query("select u from User u where lower(u.name) like lower(concat('%', :nameToFind,'%'))") 
public List<User> findByNameFree(@Param("nameToFind") String name); 

0

आप wildcard matching का उपयोग कर सकते हैं।

उदाहरण के लिए, मैं haha की तरह नाम खोज करने के लिए,

@Query("select u from User u where lower(u.name) like :u_name") 
public List<User> findByNameFree(@Param("u_name") String name); 
List<User> users = userDao.findByNameFree("%haha"); 
+1

@query ((स्प्रिंग बूट 1.4.3 के साथ परीक्षण किया गया) "से यू का चयन उपयोगकर्ता यू जहां कम (u.name) कम (: u_name) ") –

5

अगर ऐसा है तो आप केवल क्या चाहते हैं चाहते हैं और आप स्प्रिंग डाटा जेपीए उपयोग कर रहे हैं आप एक प्रश्न लिखने की जरूरत नहीं है।

List<User> findByNameContainingIgnoreCase(String name); 

वरना आप इससे पहले कि आप विधि (उन सीधे क्वेरी बस काम नहीं करेगा में डाल) को भेजना % साथ name विशेषता रैप करने के लिए की जरूरत है। या क्वेरी का उपयोग न करें लेकिन क्वेरी बनाने के लिए विनिर्देश या मानदंड API का उपयोग करें।

+0

मैं क्वेरी का उपयोग करने वाली सामान्य समस्या के लिए समाधान ढूंढना चाहता हूं। – windupurnomo

संबंधित मुद्दे