आप गेटर (जो JavaBeans शिकायत मेजबान द्वारा देखा जाएगा) की पैरामीटर बजाय निर्माता पर एनोटेशन लक्षित करने के लिए जब वहाँ कई हैं है एक संपत्ति निर्माता में घोषित करने के लिए डिफ़ॉल्ट के बाद से Annotation use-site targets उपयोग करने की आवश्यकता विकल्प उपलब्ध हैं। data
कक्षा का उपयोग भी अनुचित हो सकता है (अंत पर नोट देखें)। Kotlin डॉक्स से
@Entity data class User(
@Id
@GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)
var id: Long? = null,
@get:Size(min=5, max=15) // added annotation use-site target here
val name: String
)
property
लक्ष्य आकर्षक लग सकता है, लेकिन यह केवल Kotlin से और नहीं जावा देखा जा सकता है। आम तौर पर get
चाल करता है, और बीन set
पर इसकी आवश्यकता नहीं है।
आप एक प्रयोग साइट लक्ष्य निर्दिष्ट नहीं करते हैं, लक्ष्य एनोटेशन के @Target एनोटेशन इस्तेमाल किया जा रहा के अनुसार चुना जाता है:
डॉक्स प्रक्रिया के रूप में वर्णन करते हैं। कई लागू लक्ष्यों को देखते हैं, तो निम्न सूची से पहले लागू लक्ष्य प्रयोग किया जाता है:
और @Size
एनोटेशन है:
@Target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})
इसलिए PARAMETER
एक वैध लक्ष्य है, और एकाधिक लक्ष्य उपलब्ध हैं (पैरामीटर, फ़ील्ड, विधि [get/set]) यह PARAMETER
को चुनता है जो आप नहीं चाहते हैं। इसलिए जावाबीन होस्ट के लिए संपत्ति देखने के लिए यह गेटटर की तलाश करेगा (गुण गेटटर/सेटर द्वारा परिभाषित किए गए हैं और बैकिंग फ़ील्ड नहीं)।
Java samples में से एक में, यह पता चलता है:
public class Book {
private String title;
private String description;
// ...
@NotEmpty(groups={FirstLevelCheck.class, Default.class})
@Size(max=30)
public String getTitle() {
return title;
}
// ...
}
कौन सा गेटर पर होने के हमारे उपयोग मेल खाता है। यदि यह कुछ सत्यापन एनोटेशन शो जैसे फ़ील्ड पर होना था, तो field
उपयोग-साइट लक्ष्य देखें। या यदि क्षेत्र सार्वजनिक रूप से सुलभ होना चाहिए, तो कोटलिन में @JvmField annotation देखें।
नोट:दूसरों से नोट में उल्लेख किया है, आप की संभावना संस्थाओं के लिए एक data
वर्ग का उपयोग कर नहीं विचार करना चाहिए अगर वे एक स्वत: जनरेट आईडी का उपयोग के बाद से यह नया पुनः प्राप्त करने के लिए के रूप में ही वस्तुओं के लिए मौजूद नहीं होगा वस्तुओं; और data
कक्षा equals
और hashCode
उत्पन्न करेगी जिसमें सभी फ़ील्ड शामिल नहीं होंगे। आप Hibernate docs से इसके बारे में मार्गदर्शन पढ़ सकते हैं।
एनोटेशन का लक्ष्य क्या होना चाहिए? कन्स्ट्रक्टर पैरामीटर या फ़ील्ड? – voddan