समर्थित डेटा प्रकार
मागील तीन स्तरांदरम्यान, आम्हाला हायबरनेटशी थोडीशी ओळख झाली. दुसऱ्या फेरीची वेळ झाली आहे. आता आपण त्याच गोष्टीचा सखोल अभ्यास करू. आणि आपण डेटाबेसमधील टेबल्सच्या कॉलम्समध्ये Entity वर्गाच्या फील्ड्स मॅप करून सुरुवात करू.
तुम्हाला आधीच माहित आहे की, एंटिटी क्लासमधील फील्ड एका स्तंभावर मॅप करणे @Column भाष्य वापरून केले जाते . आणि आता प्रश्न आहे: अशा भाष्याने कोणत्या प्रकारचे फील्ड मॅप केले जाऊ शकतात?
Java मधील सर्व डेटा प्रकार तीन गटांमध्ये विभागले जाऊ शकतात:
- हा प्रकार अगदी सोपा आणि डेटाबेसमध्ये संग्रहित करणे सोपे आहे .
- प्रकार क्लिष्ट आहे आणि त्यासाठी तुम्हाला विशेष कन्व्हर्टर लिहावे लागेल .
- प्रकार अतिशय गुंतागुंतीचा आहे आणि त्याची मूल्ये संग्रहित करण्यासाठी एका वेगळ्या सारणीची आवश्यकता आहे .
हायबरनेटला कसे संग्रहित करायचे हे माहित असलेले साधे प्रकार समाविष्ट आहेत:
जावा मध्ये प्रकार | पॅकेज | वर्ग उदाहरणे |
---|---|---|
आदिम जावा प्रकार | बुलियन , इंट , डबल , इ. | |
आदिमानवांवर आवरण | java.lang | बुलियन , पूर्णांक , दुहेरी , इ. |
तार | java.lang | स्ट्रिंग |
"प्रगत" संख्या | java.math | BigInteger आणि BigDecimal |
तारीख आणि वेळ | java.time | LocalDate , LocalTime , LocalDateTime , OffsetTime , OffsetDateTime , इन्स्टंट |
विविध तारीख आणि वेळेत फरक | java.util | तारीख आणि कॅलेंडर |
जुनी तारीख आणि वेळ स्वरूप | java.sql | तारीख , वेळ , टाइमस्टॅम्प |
बाइट्स किंवा वर्णांचा अॅरे | बाइट[] किंवा बाइट[] , चार[] किंवा वर्ण[] | |
एनम्स | कोणताही enum | |
अनुक्रमे करण्यायोग्य वस्तू | java.io.Serializable ची कोणतीही अंमलबजावणी |
या सर्व प्रकारांचे SQL भाषेत समकक्ष आहेत, त्यामुळे हायबरनेटला डेटाबेसमधून ते कसे संग्रहित आणि लोड करायचे हे माहित आहे.
उदाहरण:
@Entity
@Table(name="user")
class User
{
@Column(name="id")
public Integer id;
@Column(name="name")
public String name;
@Column(name="level")
public Integer level;
@Column(name="created_date")
public Date createdDate;
}
मॅन्युअल प्रकार असाइनमेंट - @Type भाष्य
काहीवेळा तुम्हाला हायबरनेटच्या पॉलिसीशी छेडछाड करायची असेल आणि डेटाबेसमध्ये कोणत्या प्रकारचा डेटा संग्रहित करायचा हे स्पष्टपणे सांगू शकता. उदाहरणार्थ, तुमच्या Entity वर्गात पूर्णांक प्रकाराचे फील्ड आहे, परंतु बेसमध्ये VARCHAR टाईप केलेला कॉलम आहे.
यासाठी एक खास भाष्य आहे - @Type . हे अगदी सोपे दिसते:
@Type(type="type-name")
चला, उदाहरणार्थ, हायबरनेटला फील्ड बनवायला सांगानिर्मित तारीखआमच्या वापरकर्ता वर्गाचा डेटाबेसमध्ये स्ट्रिंग म्हणून संग्रहित केला होता:
@Entity
@Table(name="user")
class User
{
@Column(name="id")
public Integer id;
@Column(name="created_date")
@Type(type="org.hibernate.type.StringType")
public Date createdDate;
}
जर हायबरनेटने आपल्या नवीन प्रकारात तारीख प्रकार कसे रूपांतरित करायचे ते शोधून काढले तर ते ते करेल. जर ते समजत नसेल, तर तुम्हाला एक विशेष प्रकारचा कनवर्टर निर्दिष्ट करावा लागेल. पण त्याबद्दल नंतर अधिक.
डेटाबेससाठी हायबरनेट प्रकारांची यादी
तसे, तुमच्या लक्षात आले की आम्ही org.hibernate.type.StringType हा प्रकार निर्दिष्ट केला आहे, String नाही . याचे कारण असे की आम्ही जावा भाषेद्वारे नव्हे तर DBMS द्वारे समर्थित प्रकारांपैकी एक निवडला आहे. त्या प्रत्येकाची स्वतःची प्रकारची प्रणाली आहे. हायबरनेट विकसकांनी या VARCHAR ऐवजी सोयीस्कर जावा-शैलीतील नावे आणली आहेत.
तसे, ही यादी इतकी लहान नाही. मी त्याचा काही भाग येथे देईन:
हायबरनेट प्रकार (org.hibernate.type पॅकेज) | JDBC प्रकार | जावा प्रकार | बेसिकटाइपरेजिस्ट्री की(चे) |
---|---|---|---|
StringType | वरचार | java.lang.string | स्ट्रिंग, java.lang.string |
भौतिक क्लोब | CLOB | java.lang.string | materialized_clob |
TextType | लांबवरचार | java.lang.string | मजकूर |
वर्ण प्रकार | CHAR | char, java.lang.Caracter | char, java.lang.Caracter |
बुलियन प्रकार | बिट | बूलियन, java.lang.Boolian | बूलियन, java.lang.Boolian |
अंकीय बुलियन प्रकार | पूर्णांक, 0 असत्य आहे, 1 सत्य आहे | बूलियन, java.lang.Boolian | अंकीय_बूलियन |
होय नाही टाईप | CHAR, 'N'/'n' असत्य आहे, 'Y'/'y' सत्य आहे. अप्परकेस व्हॅल्यू डेटाबेसवर लिहिली जाते. | बूलियन, java.lang.Boolian | होय नाही |
TrueFalseType | CHAR, 'F'/'f' असत्य आहे, 'T'/'t' सत्य आहे. अप्परकेस व्हॅल्यू डेटाबेसवर लिहिली जाते. | बूलियन, java.lang.Boolian | खरे खोटे |
बाइट प्रकार | TINYINT | बाइट, java.lang.Byte | बाइट, java.lang.Byte |
लहान प्रकार | SMALINT | लहान, java.lang.Short | लहान, java.lang.Short |
पूर्णांक प्रकार | पूर्णांक | int, java.lang.Integer | int, java.lang.Integer |
लांब प्रकार | BIGINT | लांब, java.lang.Long | लांब, java.lang.Long |
फ्लोट प्रकार | फ्लोट | फ्लोट, java.lang.float | फ्लोट, java.lang.float |
दुहेरी प्रकार | दुहेरी | दुहेरी, java.lang.Double | दुहेरी, java.lang.Double |
BigIntegerType | अंकीय | java.math.BigInteger | big_integer, java.math.BigInteger |
BigDecimalType | अंकीय | java.math.BigDecimal | big_decimal, java.math.bigDecimal |
टाइमस्टॅम्प प्रकार | टाइमस्टॅम्प | java.sql.timestamp | timestamp, java.sql.timestamp |
वेळ प्रकार | TIME | java.sql.Time | वेळ, java.sql.Time |
तारीख प्रकार | DATE | java.sql.date | तारीख, java.sql.date |
कॅलेंडर प्रकार | टाइमस्टॅम्प | java.util.Calendar | कॅलेंडर, java.util.Calendar |
CalendarDateType | DATE | java.util.Calendar | calendar_date |
चलन प्रकार | java.util.चलन | वरचार | चलन, java.util.Currency |
LocaleType | वरचार | java.util.locale | locale, java.utility.locale |
टाइमझोन प्रकार | VARCHAR, TimeZone ID वापरून | java.util.TimeZone | टाइमझोन, java.util.TimeZone |
UrlType | वरचार | java.net.URL | url, java.net.URL |
वर्ग प्रकार | VARCHAR(वर्ग FQN) | java.lang.वर्ग | वर्ग, java.lang.class |
टेबल, अर्थातच, मोठे आहे, परंतु खूप उपयुक्त आहे. उदाहरणार्थ, यावरून हे स्पष्ट होते की बुलियन प्रकार किमान सहा वेगवेगळ्या प्रकारे डेटाबेसमध्ये संग्रहित केला जाऊ शकतो. तुला एवढी गरज नाही का? आणि कोण म्हणाले की आपण बचत करण्याचा मार्ग निवडा?
SQL मध्ये बूलियन प्रकार नाही आणि तो अनेकदा याप्रमाणे संग्रहित केला जातो:
- 1 किंवा 0
- 'एफ' किंवा 'टी'
- 'Y' किंवा 'N'
म्हणून, जेव्हा हायबरनेटला हे सर्व त्रास समजतात तेव्हा ते खूप चांगले असते. किंवा, उदाहरणार्थ, डेटाबेसमधील डेटा अॅरेचे संचयन घेऊ. तेथे विविध पर्यायांचा समूह आहे आणि हायबरनेटला त्या सर्वांसह कसे कार्य करावे हे माहित आहे:
हायबरनेट प्रकार (org.hibernate.type पॅकेज) | JDBC प्रकार | जावा प्रकार | बेसिक टाइपरजिस्ट्र |
---|---|---|---|
ब्लॉब प्रकार | BLOB | java.sql.blob | ब्लॉग, java.sql.blob |
क्लॉब प्रकार | CLOB | java.sql.clob | clob, java.sql.clob |
बायनरी प्रकार | वार्बिनरी | बाइट[] | बायनरी, बाइट[] |
मटेरियलाइज्ड ब्लॉबटाइप | BLOB | बाइट[] | materized_blob |
प्रतिमा प्रकार | लाँगवर्बिनरी | बाइट[] | प्रतिमा |
रॅपरबायनरी प्रकार | वार्बिनरी | java.lang.Byte[] | wrapper-binary, Byte[], java.lang.Byte[] |
CharArrayType | वरचार | चार[] | वर्ण, वर्ण[] |
CharacterArrayType | वरचार | java.lang.Caracter[] | आवरण-वर्ण, वर्ण[], java.lang.Caracter[] |
UUIDBinaryType | बायनरी | java.util.UUID | uuid-binary, java.util.UUID |
UUIDCharType | CHAR, VARCHAR देखील वाचू शकतो | java.util.UUID | uuid-char |
PostgreSQLUUIDT प्रकार | PostgreSQL UUID, प्रकार #OTHER द्वारे, जे PostgreSQL JDBC ड्रायव्हर व्याख्येचे पालन करते | java.util.UUID | pg-uuid |
हायबरनेट प्रकार (org.hibernate.type पॅकेज) | JDBC प्रकार | जावा प्रकार | बेसिक टाइपरजिस्ट्र |
---|---|---|---|
कालावधी प्रकार | BIGINT | java.वेळ.कालावधी | कालावधी, जावा.वेळ.कालावधी |
झटपट प्रकार | टाइमस्टॅम्प | java.time.त्वरित | झटपट, java.time.Instant |
LocalDateTimeType | टाइमस्टॅम्प | java.time.LocalDateTime | LocalDateTime, java.time.LocalDateTime |
LocalDateType | DATE | java.time.LocalDate | LocalDate, java.time.LocalDate |
LocalTimeType | TIME | java.time.LocalTime | LocalTime, java.time.LocalTime |
ऑफसेटDateTimeType | टाइमस्टॅम्प | java.time.OffsetDateTime | OffsetDateTime, java.time.OffsetDateTime |
ऑफसेटटाइम प्रकार | TIME | java.time.OffsetTime | ऑफसेटटाइम, java.time.OffsetTime |
ऑफसेटटाइम प्रकार | टाइमस्टॅम्प | java.time.ZonedDateTime | ZonedDateTime, java.time.ZonedDateTime |
GO TO FULL VERSION