জেপিএতে সম্মিলিত প্রাথমিক কী কীভাবে তৈরি এবং পরিচালনা করতে হয়


108

আমি একই তথ্য এন্ট্রি থেকে সংস্করণ পেতে চাই। অন্য কথায়, আমি অন্য সংস্করণ নম্বর দিয়ে এন্ট্রিটি নকল করতে চাই।

id - Version প্রাথমিক কী হবে।

সত্তাটি দেখতে কেমন হবে? আমি এটি অন্য সংস্করণে কীভাবে নকল করতে পারি?

id Version ColumnA

1   0      Some data
1   1      Some Other data
2   0      Data 2. Entry
2   1      Data

@IdClassটীকাগুলি ব্যবহার করার সময় , আমি যে টিপটি পেয়েছি তা হ'ল @Columnটীকাটি হ'ল সত্তা শ্রেণীর ক্ষেত্রগুলিতে ( YourEntityরোহিতজানের নমুনা কোডে)।
কেনএসভি

উত্তর:


231

আপনি একটি করতে পারেন Embedded classযা আপনার দুটো কী রয়েছে, এবং তারপর হিসাবে বর্গ একটি রেফারেন্স আছে EmbeddedIdআপনার Entity

আপনার প্রয়োজন @EmbeddedIdএবং @Embeddableটীকাগুলি দরকার ।

@Entity
public class YourEntity {
    @EmbeddedId
    private MyKey myKey;

    @Column(name = "ColumnA")
    private String columnA;

    /** Your getters and setters **/
}
@Embeddable
public class MyKey implements Serializable {

    @Column(name = "Id", nullable = false)
    private int id;

    @Column(name = "Version", nullable = false)
    private int version;

    /** getters and setters **/
}

আরেকটি উপায় এই কাজের অর্জনে ব্যবহার করা @IdClassউভয় আপনার টীকা ও স্থান idযে IdClass। এখন আপনি @Idউভয় বৈশিষ্ট্যের উপর সাধারণ টিকা ব্যবহার করতে পারেন

@Entity
@IdClass(MyKey.class)
public class YourEntity {
   @Id
   private int id;
   @Id
   private int version;

}

public class MyKey implements Serializable {
   private int id;
   private int version;
}

4
@Generatedvalue
এম্বেডডইড

1
@Kayser। যতদুর আমি জানি. না You আপনাকে আপনার কীক্লাস উদাহরণে তাদের জন্য স্পষ্টভাবে মান সেট করতে হবে এবং তারপরে আপনার সত্তায় সেই কী শ্রেণীর উদাহরণটি সেট করতে হবে।
রোহিত জৈন

@Kayser। @GeneratedValueকেবলমাত্র একটি প্রাথমিক কী এর মূল মান উত্পন্ন করতে ব্যবহার করা যেতে পারে, এটি যৌগিক কীগুলির জন্য সংমিশ্রণ তৈরি করতে পারে না।
রোহিত জৈন

1
@ রোহিতজাইন কেবল একটি জিনিস: আপনি আসলে এম্বেড করা শ্রেণিকে সর্বজনীন করতে পারবেন না (পাবলিক হওয়ার জন্য এটি নিজস্ব ফাইলে থাকা দরকার)
লুকাশ

1
@ ফ্যাসেঞ্জি এটি এখনও ওয়েব্যাক মেশিনের মাধ্যমে অ্যাক্সেস করা যেতে পারে: web.archive.org/web/20170123035517/http://uaihebert.com/… । মনে হচ্ছে যে এই নিবন্ধটি দ্বারা বাতিল করা হয় web.archive.org/web/20170202203555/http://uaihebert.com/... এবং web.archive.org/web/20161014051056/http://uaihebert.com/... যা বিলুপ্ত …
র‌্যাডলান

9

Serializableআপনি যদি ব্যবহার করছেন তবে মাইকি ক্লাসটি অবশ্যই প্রয়োগ করতে হবে@IdClass


5

মূল শ্রেণি:

@Embeddable
@Access (AccessType.FIELD)
public class EntryKey implements Serializable {

    public EntryKey() {
    }

    public EntryKey(final Long id, final Long version) {
        this.id = id;
        this.version = version;
    }

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getVersion() {
        return this.version;
    }

    public void setVersion(Long version) {
        this.version = version;
    }

    public boolean equals(Object other) {
        if (this == other)
            return true;
        if (!(other instanceof EntryKey))
            return false;
        EntryKey castOther = (EntryKey) other;
        return id.equals(castOther.id) && version.equals(castOther.version);
    }

    public int hashCode() {
        final int prime = 31;
        int hash = 17;
        hash = hash * prime + this.id.hashCode();
        hash = hash * prime + this.version.hashCode();
        return hash;
    }

    @Column (name = "ID")
    private Long id;
    @Column (name = "VERSION")
    private Long operatorId;
}

সত্তা শ্রেণি:

@Entity
@Table (name = "YOUR_TABLE_NAME")
public class Entry implements Serializable {

    @EmbeddedId
    public EntryKey getKey() {
        return this.key;
    }

    public void setKey(EntryKey id) {
        this.id = id;
    }

    ...

    private EntryKey key;
    ...
}

আমি এটি অন্য সংস্করণে কীভাবে নকল করতে পারি?

সরবরাহকারী থেকে পুনরুদ্ধার করা সত্তাকে আপনি আলাদা করতে পারেন, এন্ট্রির কীটি পরিবর্তন করতে পারেন এবং তারপরে এটিকে নতুন সত্তা হিসাবে চালিয়ে যেতে পারেন।


এন্ট্রিকে আইডি সংজ্ঞায়িত করা সম্ভব AUTOGENERATED। এর মতো অদ্ভুত কিছু @GeneratedValue(strategy = GenerationType.IDENTITY)
কায়সার

1
আমি কীভাবে 2 টি দীর্ঘ প্রাথমিক কীগুলির জন্য হ্যাশ গণনা করব তাও ভাবছি। হিসাবে hashএবং primeপদ্ধতিতে hashCodeক্লাসে EntryKey, আপনি আমাকে বলতে পারেন যেখানে যে ধারণা থেকে আসে?
ব্রুস সান

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