জেপিএ টীকা সহ মাল্টি-কলামের সীমাবদ্ধতা কীভাবে প্রবর্তন করবেন?


91

আমি জেপিএ-ম্যাপযুক্ত সত্তায় মাল্টি-কি বাধাটি প্রবর্তনের চেষ্টা করছি:

public class InventoryItem {
    @Id
    private Long id;

    @Version 
    private Long version;

    @ManyToOne
    @JoinColumn("productId")
    private Product product;

    @Column(nullable=false);
    private long serial;
}

মূলত (পণ্য, সিরিয়াল) জুটিটি অনন্য হওয়া উচিত তবে আমি কেবল একটি উপায় খুঁজে পেয়েছি যে সিরিয়ালটি অনন্য হওয়া উচিত। এটি স্পষ্টতই ভাল ধারণা নয় যেহেতু বিভিন্ন পণ্যগুলির একই ক্রমিক সংখ্যা থাকতে পারে।

জেপিএ এর মাধ্যমে এই সীমাবদ্ধতা উত্পন্ন করার কোনও উপায় আছে বা আমি নিজে ডিবিতে এটি তৈরি করতে বাধ্য হই?

উত্তর:


191

আপনি @Table(uniqueConstraints = ...)আপনার সত্তা শ্রেণিতে টীকাটি ব্যবহার করে অনন্য প্রতিবন্ধকতা ঘোষণা করতে পারেন , যেমন

@Entity
@Table(uniqueConstraints={
    @UniqueConstraint(columnNames = {"productId", "serial"})
}) 
public class InventoryItem {
    ...
}

নোট করুন যে এটি ম্যাজিকভাবে ডাটাবেসে অনন্য সীমাবদ্ধতা তৈরি করে না, এটি তৈরি করার জন্য আপনার এখনও একটি ডিডিএল প্রয়োজন। তবে দেখে মনে হচ্ছে আপনি জেপিএ সত্তার সংজ্ঞা অনুসারে ডাটাবেস তৈরির জন্য কিছু ধরণের স্বয়ংক্রিয় সরঞ্জাম ব্যবহার করছেন।


4
ইতিমধ্যে স্থানে থাকা সীমাবদ্ধতা সহ বিদ্যমান ডাটাবেসের জন্য কি এই ধরণের জিনিসটির প্রয়োজন?
রব

আমি বিশ্বাস করি যে সীমাবদ্ধতা তৈরি হবে জেপিএ সরবরাহকারী ডেটা বেস তৈরি করছে।
অ্যালানবজেক্ট

স্বতন্ত্রতাটি (প্রোডাক্টআইডি) কলাম এবং (সিরিয়াল) কলামের জন্য বা মোট (প্রোডাক্টআইডি, সিরিয়াল) 2 টি কলামের সীমাবদ্ধতার জন্য?
পি সতীশ প্যাট্রো

69

ইতিমধ্যে উত্তর হিসাবে, @Tableটীকাটি ব্যবহার করে বহু-কলাম সূচী যুক্ত করা যেতে পারে । তবে columnNamesক্লাস অ্যাট্রিবিউট নয়, আসল ডিবি কলামের নাম হওয়া দরকার। সুতরাং, কলামটি নীচের মতো হলে:

@Column(name="product_id")
Long productId;

তারপরে @Tableটীকাটি নীচের মতো হওয়া উচিত

@Table(uniqueConstraints=
       @UniqueConstraint(columnNames = {"product_id", "serial"}) 

10
এটি একটি অত্যন্ত গুরুত্বপূর্ণ স্পষ্টতা: টেবিলের নাম এবং না নাম বস্তুর নাম।
ক্যালাবাকিন

4
স্বতন্ত্রতাটি (প্রোডাক্টআইডি) কলাম এবং (সিরিয়াল) কলামের জন্য বা মোট (প্রোডাক্টআইডি, সিরিয়াল) 2 টি কলামের সীমাবদ্ধতার জন্য?
পি সতীশ প্যাট্রো

: Kotlin: এই উত্তরে একবার দেখে kotlin জন্য একটি উদাহরণ এটি নিয়ে যান stackoverflow.com/a/47000044/285431
ডির্ক

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