যেমন আগেই বলা হয়েছিল, এটি যখন কেবলমাত্র একক ক্ষেত্র @Column(unique = true)হয় UniqueConstraintতখন একটি শর্টকাট হয় ।
আপনি যে উদাহরণ দিয়েছেন তা থেকে উভয়ের মধ্যে বিশাল পার্থক্য রয়েছে।
@Column(unique = true)
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private ProductSerialMask mask;
@Column(unique = true)
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private Group group;
এই কোডটি বোঝায় যে উভয়ই maskএবং groupঅনন্য হতে হবে তবে পৃথকভাবে। এর অর্থ হ'ল, উদাহরণস্বরূপ, যদি আপনার কাছে একটি মাস্ক.আইডি = 1 রয়েছে এবং রেকর্ডটি মাস্ক.আইডি = 1 দিয়ে সন্নিবেশ করানোর চেষ্টা করে , আপনি একটি ত্রুটি পাবেন কারণ সেই কলামটির অনন্য মান থাকতে হবে। গ্রুপের জন্য একই আবেদন।
অন্য দিকে,
@Table(
name = "product_serial_group_mask",
uniqueConstraints = {@UniqueConstraint(columnNames = {"mask", "group"})}
)
সূচিত করে যে সংযুক্ত মুখোশ + গোষ্ঠীর মানগুলি অনন্য হওয়া উচিত। তার মানে আপনার উদাহরণস্বরূপ, মাস্ক.আইডি = 1 এবং গ্রুপ. id = 1 সহ একটি রেকর্ড থাকতে পারে এবং আপনি যদি মাস্ক.আইডি = 1 এবং গ্রুপ. id = 2 দিয়ে অন্য রেকর্ড সন্নিবেশ করানোর চেষ্টা করেন তবে এটি প্রবেশ করানো হবে সফলভাবে, যদিও প্রথম ক্ষেত্রে এটি না।
আপনি যদি মুখোশ এবং গোষ্ঠী উভয়ই আলাদা আলাদাভাবে এবং শ্রেণিবদ্ধ স্তরে আলাদা করে রাখতে চান তবে আপনাকে নিম্নলিখিত হিসাবে কোডটি লিখতে হবে:
@Table(
name = "product_serial_group_mask",
uniqueConstraints = {
@UniqueConstraint(columnNames = "mask"),
@UniqueConstraint(columnNames = "group")
}
)
এটি প্রথম কোড ব্লকের মতোই প্রভাব ফেলে।
unique=true, সূচিটি স্বয়ংক্রিয়ভাবে আপডেটকারী স্কিম দ্বারা যুক্ত করা হয়নি।@UniqueConstraintএটি উপস্থিত করা। একটি বাগ হতে পারে।