এম্বেড করা বস্তুর সম্পত্তি দ্বারা স্প্রিং ডেটা জেপিএ সন্ধান করে


101

আমি একটি স্প্রিং ডেটা জেপিএ সংগ্রহস্থল ইন্টারফেস পদ্ধতির স্বাক্ষর লিখতে চাই যা আমাকে সেই সত্তায় একটি এম্বেড থাকা সামগ্রীর সম্পত্তি সহ সত্তা সন্ধান করতে দেয়। কেউ কি জানেন যে এটি সম্ভব কিনা, এবং যদি হয় তবে কীভাবে?

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

@Entity
@Table(name = "BOOK_UPDATE_QUEUE", indexes = { uniqueConstraints = @UniqueConstraint(columnNames = {
        "bookId", "region" }, name = "UK01_BOOK_UPDATE_QUEUE"))
public class QueuedBook implements Serializable {

    @Embedded
    @NotNull
    private BookId bookId;

    ...

}

@Embeddable
public class BookId implements Serializable {

    @NotNull
    @Size(min=1, max=40)
    private String bookId;

    @NotNull
    @Enumerated(EnumType.STRING)
    private Region region;

    ...

}

public interface QueuedBookRepo extends JpaRepository<QueuedBook, Long> {

    //I'd like to write a method like this, but can't figure out how to search by region,
    //when region is actually a part of the embedded BookId
    Page<QueuedBook> findByRegion(Region region, Pageable pageable);

}

আমি কি স্প্রিং ডেটা ব্যবহার করে এর জন্য একটি কোয়েরি লিখতে পারি?


4
না findByBookIdRegion(Region region, Pageable pageable)না কৌতুক?
অলিভার ড্রটবহম

2
হ্যাঁ, এটি করে। আমি কোথাও এর জন্য নথিপত্র পাইনি couldn't এটি কোথাও লুকানো বা জড়িত যা আমি দেখিনি?
CorayThan

এটি একটি উত্তরে পরিণত হয়েছে এবং রেফারেন্স ডক্সের সম্পর্কিত বিভাগে একটি লিঙ্ক যুক্ত করেছে।
অলিভার ড্রটবহম

উত্তর:


145

এই পদ্ধতির নামটি কৌশলটি করা উচিত:

Page<QueuedBook> findByBookIdRegion(Region region, Pageable pageable);

রেফারেন্স ডক্সের ক্যোয়ারী ব্যয় সম্পর্কিত বিভাগে সে সম্পর্কে আরও তথ্য ।


11
আমার যদি এম্বেডেবলের একটি তালিকা থাকে? বা উপাদান সংগ্রহ?
ব্যবহারকারী 962206

যদি আমরা 3 প্রিপার্টি দিয়ে সন্ধানকারী অনুসন্ধান চাই তবে সিনট্যাক্সটি কী হবে? এটি ফাইডবাইপ্রো 1 এবং এন্ডপ্রো 2 এন্ডপ্রো 3 এর মতো?
সুরেন্দ্রপান্ডে

এই জাতীয় জিজ্ঞাসা কি সর্বদা অভ্যন্তরীণ যোগদানের ফলাফল করে? আমি করছি One findByIdAndTwoId(Long oneId, Long twoId);এবং ফর্মের একটি প্রশ্নের ফলাফল:select ...... from one one_ left outer join two two_ on one_.two_id = two_.id where one_id = ? and two_.id = ?
TroJaN

44

উপরের - FindByBookIdRegion () আমার পক্ষে কাজ করে নি। নিম্নলিখিতটি স্ট্রিং ডেটা জেপিএর সর্বশেষ প্রকাশের সাথে কাজ করে:

Page<QueuedBook> findByBookId_Region(Region region, Pageable pageable);

3
আপনার মামলাগুলি অস্পষ্টতার সাথে সম্পর্কিত হতে পারে যেমন ডক্টস.স্প্রিং.আইও
মার্সেলো ডি বিক্রয়

9

আপনি যদি সংযুক্ত প্রাথমিক কী হিসাবে বুকআইড ব্যবহার করে থাকেন তবে আপনার ইন্টারফেসটি এ থেকে পরিবর্তন করতে ভুলবেন না:

public interface QueuedBookRepo extends JpaRepository<QueuedBook, Long> {

প্রতি:

public interface QueuedBookRepo extends JpaRepository<QueuedBook, BookId> {

এবং আপনার টেক্সটবুক শ্রেণিতে এভাবে এম্বেড করা @ এমবেডড আইডিতে টীকা পরিবর্তন করুন:

public class QueuedBook implements Serializable {

@EmbeddedId
@NotNull
private BookId bookId;

...

1

আমার মতে, বসন্ত সমস্ত ক্ষেত্রে সহজেই পরিচালনা করে না। আপনার ক্ষেত্রে নিম্নলিখিতটি কৌশলটি করা উচিত

Page<QueuedBook> findByBookIdRegion(Region region, Pageable pageable);  

অথবা

Page<QueuedBook> findByBookId_Region(Region region, Pageable pageable);

তবে এটি আপনার @Embeddableক্লাসে থাকা ক্ষেত্রগুলির নামকরণের কনভেনশনের উপরও নির্ভর করে ,

উদাহরণস্বরূপ নীচের ক্ষেত্রটি উপরে উল্লিখিত স্টাইলগুলির কোনওটিতে কাজ না করে

private String cRcdDel;

আমি উভয় কেস দিয়ে চেষ্টা করেছি (নিম্নরূপে) এবং এটি কার্যকর হয়নি (মনে হচ্ছে স্প্রিং এই জাতীয় নামকরণের কনভেনশনগুলি পরিচালনা করে না (যেমন অনেক ক্যাপ্সের কাছে, বিশেষত শুরুতে - ২ য় পত্র) এটি নিশ্চিত কিনা তা নিশ্চিত কিনা যদিও একমাত্র কেস)

Page<QueuedBook> findByBookIdCRcdDel(String cRcdDel, Pageable pageable); 

অথবা

Page<QueuedBook> findByBookIdCRcdDel(String cRcdDel, Pageable pageable);

যখন আমি কলামটির নামকরণ করেছি

private String rcdDel;

আমার নিম্নলিখিত সমাধানগুলি কোনও সমস্যা ছাড়াই দুর্দান্ত কাজ করে:

Page<QueuedBook> findByBookIdRcdDel(String rcdDel, Pageable pageable); 

অথবা

Page<QueuedBook> findByBookIdRcdDel(String rcdDel, Pageable pageable);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.