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


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.