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


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.