স্প্রিং ক্রুডেরপোজিটরি সন্ধান করুন বাই আইভেন্টরিআইডস (তালিকা <দীর্ঘ> ইনভেন্টরিআইডলিস্ট) - আইএন ক্লজের সমতুল্য


169

স্প্রিং ক্রুডেরপোসিটরিতে, আমাদের কি কোনও ক্ষেত্রের জন্য "আইএন ক্লজ" সমর্থন করে? অর্থাৎ নীচের মতো কিছু?

 findByInventoryIds(List<Long> inventoryIdList) 

যদি এই ধরনের সমর্থন উপলব্ধ না হয়, কোন মার্জিত বিকল্প বিবেচনা করা যেতে পারে? প্রতিটি আইডির জন্য ফায়ারিং কোয়েরি অনুকূল নাও হতে পারে।

উত্তর:


283

findByInventoryIdIn(List<Long> inventoryIdList) কৌতুক করা উচিত।

এইচটিটিপি অনুরোধের প্যারামিটার ফর্ম্যাটটি এর মতো হবে:

Yes ?id=1,2,3
No  ?id=1&id=2&id=3

জেপিএ সংগ্রহস্থল কীওয়ার্ডগুলির সম্পূর্ণ তালিকা বর্তমান ডকুমেন্টেশন তালিকায় পাওয়া যাবে । এটি IsInসমান এটি দেখায় - আপনি যদি পাঠের জন্য ক্রিয়াটি পছন্দ করেন - এবং জেপিএও সমর্থন করে NotInএবং IsNotIn।


ধন্যবাদ, আমি ঠিক এটি খুঁজছিলাম ছিল। তারা কি এটি ক্রুডরোপোসিটারি পৃষ্ঠায় নথিভুক্ত করেছে, বা কোড পড়ে আবিষ্কার করে?
— এস্প্রেসো


ধন্যবাদ। এই "মণিটি পরিশিষ্ট বিতে লুকিয়ে আছে", ঠিক তাই :)
— এস্প্রেসো

11
রেফারেন্স ডক্স ইউআরএল পরিবর্তন হয়েছে
— মেজাক

1
পদ্ধতির স্বাক্ষরের জন্য: <পার্সন> FindByIdIn তালিকা (তালিকা <Integer> আইডি); আমি ত্রুটিটি পেয়েছি: এর দ্বারা তৈরি হয়েছে: java.lang.Number FormatException: ইনপুট স্ট্রিংয়ের জন্য: "(1, 2)"
— ব্যবহারকারী 64141

103

একটি স্প্রিং ক্রুডেপোসিটোরির যে কোনও পদ্ধতির জন্য আপনার নিজের @ কিউরি নির্দিষ্ট করতে সক্ষম হবেন। এর মতো কিছু কাজ করা উচিত:

@Query( "select o from MyObject o where inventoryId in :ids" )
List<MyObject> findByInventoryIds(@Param("ids") List<Long> inventoryIdList);

ধন্যবাদ, এটি কাজ করে। @ কিওয়ারি না লিখে একটি "আরও ক্লিনার" সমাধান খুঁজছিল।
— এসপ্রেসো

3
অলিভার গিয়ের্কই এমন লোক যে এর উত্তর জানতে পারে এবং তার কাছে "আরও ক্লিনার" সমাধান রয়েছে। আপনি তার উত্তর গ্রহণ করা উচিত।
— ডিজিটালজেল

1
গ্রেট! আমি Set<String>প্যারামিটার হিসাবে ব্যবহার করেছি , ভাল কাজ করেছি।
— ব্লুবার্ড

আমি যদি আমার পদ্ধতির একটি তালিকায় 2 টি প্যারামিটারগুলি পাস করতে চাই এবং অন্যটি একটি সাধারণ স্ট্রিং, তা কি কাজ করবে? যদি হ্যাঁ আমি কীভাবে আমার পদ্ধতির নাম রাখব
— user3614936

22

হ্যাঁ, এটি সমর্থিত।

পদ্ধতির নামের ভিতরে সমর্থিত কীওয়ার্ডগুলির জন্য এখানে সরবরাহ করা ডকুমেন্টেশন চেক করুন ।

আপনি @ কোয়েরি টিকাটি ব্যবহার না করে এবং আপনার কাস্টম ক্যোয়ারী না লিখে কেবল সংগ্রহস্থল ইন্টারফেসে পদ্ধতিটি সংজ্ঞায়িত করতে পারেন । আপনার ক্ষেত্রে এটি অনুসরণ হিসাবে হবে:

List<Inventory> findByIdIn(List<Long> ids);

আমি ধরে নিলাম আপনার কাছে ইনভেন্টরি সত্তা এবং ইনভেন্টরিরপোজিটরি ইন্টারফেস রয়েছে। আপনার ক্ষেত্রে কোডটি দেখতে এমন হওয়া উচিত:

সত্তা

@Entity
public class Inventory implements Serializable {

  private static final long serialVersionUID = 1L;

  private Long id;

  // other fields
  // getters/setters

}

ভান্ডার

@Repository
@Transactional
public interface InventoryRepository extends PagingAndSortingRepository<Inventory, Long> {

  List<Inventory> findByIdIn(List<Long> ids);

}

এটি ক্রুডেপোসিটোরি ইন্টারফেসকে প্রসারিত সমস্ত ইন্টারফেসের জন্য কাজ করে ।
— ডিজিনট

1
আইডির আকার 1000 এর বেশি বা ডিবি এর উপর নির্ভর করে নির্দিষ্ট আকারের হলে এটি কাজ করবে না। এ কেমন? << তালিকা> FindByIdIn তালিকা (তালিকা <দীর্ঘ> আইডি, পেজযোগ্য পেজযোগ্য);
— জুলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.