বসন্ত জেপাআরপোসিটোরিতে% প্রশ্নের মত


110

আমি একটি অনুরূপ ক্যোয়ারী লিখতে চাই JpaRepositoryতবে এটি কোনও কিছুই ফিরিয়ে দিচ্ছে না:

LIKE '%place%'-এটা কাজ করছে না.

LIKE 'place' পুরোপুরি কাজ করে।

আমার কোডটি এখানে:

@Repository("registerUserRepository")
public interface RegisterUserRepository extendsJpaRepository<Registration,Long> {

    @Query("Select c from Registration c where c.place like :place")
     List<Registration> findByPlaceContaining(@Param("place")String place);
}

উত্তর:


199

স্প্রিং ডেটা জেপিএ ক্যোয়ারির জন্য "%" অক্ষরের পাশাপাশি likeআপনার ক্যোয়ারীতে যেমন রয়েছে তেমন একটি স্পেস চর প্রয়োজন

@Query("Select c from Registration c where c.place like %:place%")।

Cf. http://docs.spring.io/spring-data/jpa/docs/current/references/html ।

আপনি @Queryসামগ্রিকভাবে টীকা থেকে মুক্তি পেতে চাইতে পারেন , এটি স্ট্যান্ডার্ড ক্যোয়ারির সাথে সাদৃশ্যপূর্ণ বলে মনে হচ্ছে (বসন্তের ডেটার প্রক্সিগুলির দ্বারা স্বয়ংক্রিয়ভাবে প্রয়োগ করা হয়েছে); যেমন একক লাইন ব্যবহার করে

List<Registration> findByPlaceContaining(String place);

পর্যাপ্ত.


23
এটি কোনও ক্যোয়ারির ক্ষেত্রে কেস উপেক্ষা করার জন্যও কার্যকর হতে পারে: FindByPlaceIgnoreCaseContaining (স্ট্রিং প্লেস) ব্যবহার করে;
— ইলাইল্যা

পার্শ্ব মন্তব্য হিসাবে - আপনি একই ক্যোয়ারির মধ্যে%: পরম% এর সাথে% প্যারাম% এর সাথে মিশতে এবং মিলাতে পারবেন না। অন্যথায় অ্যাপটি এমনকি শুরু হবে না।
— আরভিপি

ধন্যবাদ. আমি লিখতে ব্যবহার like '%:place%'করেছি 'এবং এর কোনও ফলসই পাওয়া যায় নি, কারণ হাইবারনেট 'স্ট্রিংগুলিতে নিজেই যুক্ত হয়।
— ইয়ামশিরো

এটি একটি ভাল প্রতিক্রিয়া নয় এবং এটি সম্ভাব্যরূপে বিপজ্জনকও। বসন্ত এটি কন্টিনিং ইগনোর কেস দিয়ে সাজিয়েছে, আমার উত্তর বেলো পরীক্ষা করে।
— অ্যালেক্সিয়াস ডায়াকোগিজানিস

99

আপনার আসলে কোনও @Queryটিকা দরকার নেই ।

আপনি কেবল নিম্নলিখিত ব্যবহার করতে পারেন

    @Repository("registerUserRepository")
    public interface RegisterUserRepository extends JpaRepository<Registration,Long>{

    List<Registration> findByPlaceIgnoreCaseContaining(String place);

    }

আমার জন্য এটি সবচেয়ে ভাল সমাধান। আমি জানতাম না যে আপনি কনটেনিংয়ের সাথে মিলিয়ে IgnoreCase ব্যবহার করতে পারেন, এটি নথিতে নেই in
— উইলসন ক্যাম্পাসানো

1
আমি যখন অনেক কলাম ব্যবহার করতে চাই তখন কী হবে? - আমি বিশ্বাস করি @Query()একটি আবশ্যক, তাই না? এই পদ্ধতির সাহায্যে আমি এটি করতে পারি orযে আসলে এই ক্ষেত্রেটির পক্ষে উপযুক্ত উপযুক্ত সমাধান নয়:findByField1OrField2Containg(String phraseForField1, String phraseForField2)
— ব্যবহারকারী 3529850

26

আপনি স্প্রিং ডেটা জেপিএ সমর্থিত কীওয়ার্ড "সমন্বিত" ব্যবহার করে অনুরূপ প্রশ্নের প্রয়োগ করতে পারেন ।

List<Registration> findByPlaceContaining(String place);

20

আপনার ক্ষেত্রে, আপনি সরাসরি জেপিএ পদ্ধতি ব্যবহার করতে পারেন। এটি নমোর মতো:

সমন্বিত: নির্বাচন করুন ... যেমন%: স্থান%

List<Registration> findByPlaceContainingIgnoreCase(String place);

এখানে, IgnoreCase আপনাকে কেসটিকে উপেক্ষা করে আইটেম অনুসন্ধান করতে সহায়তা করবে।

জেপিকিউএলে @ কিউরি ব্যবহার :

@Query("Select registration from Registration registration where 
registration.place LIKE  %?1%")
List<Registration> findByPlaceContainingIgnoreCase(String place);

এখানে সম্পর্কিত কিছু পদ্ধতি রয়েছে:

  1. মত findByPlaceLike

    … যেখানে এক্স.প্লেস? 1

  2. দিয়ে শুরু findByPlaceStartingWith

    … যেখানে এক্স.প্লেসটি চান? 1 (প্যারামিটার সংযুক্ত% এর সাথে আবদ্ধ)

  3. EndingWith findByPlaceEndingWith

    … যেখানে এক্স.প্লেসটি পছন্দ করেন?

  4. ধারণকারী findByPlaceContaining

    … যেখানে এক্স.প্লেসটি চান? 1 (প্যারামিটার আবদ্ধ%)

আরও তথ্য, এই লিঙ্কটি দেখুন , এই লিঙ্ক এবং এটি

আশা করি এটা তোমাকে সাহায্য করবে :)


6

আপনার কাছে স্থানধারক ব্যবহারের একটি বিকল্প থাকতে পারে:

@Query("Select c from Registration c where c.place LIKE  %?1%")
List<Registration> findPlaceContainingKeywordAnywhere(String place);

4

এটা চেষ্টা কর.

@Query("Select c from Registration c where c.place like '%'||:place||'%'")

যদি আমরা ব্যবহার করি something=:placeএবং another like %:place%জিজ্ঞাসা করি তবে সহায়ক ।
— hong4rc

1

কল ফান্ট করার সময় আমি ব্যবহার করি: findByPlaceContaining("%" + place);

বা: findByPlaceContaining(place + "%");

বা: findByPlaceContaining("%" + place + "%");


1

উত্তর ঠিক হবে

-> Qu @ কিউরি ("আপনি বিভাগের ইউ থেকে নির্বাচন করুন যেখানে u.category নাম যেমন%: ইনপুট%")
     তালিকাগুলি AllByInput (@Param ("ইনপুট") স্ট্রিং ইনপুট);

0

সমাধান ছাড়াই খুঁজে পেয়েছি @Query(আসলে আমি চেষ্টা করেছি যা কোনটি "গৃহীত" However তবে এটি কার্যকর হয়নি)।

Page<Entity>পরিবর্তে ফিরে আসতে হবে List<Entity>:

public interface EmployeeRepository 
                          extends PagingAndSortingRepository<Employee, Integer> {
    Page<Employee> findAllByNameIgnoreCaseStartsWith(String name, Pageable pageable);
}

IgnoreCase অংশটি অর্জনে সমালোচনা ছিল!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.