ஆதரிக்கப்படும் தரவு வகைகள்
முந்தைய மூன்று நிலைகளின் போது, நாங்கள் Hibernate பற்றி கொஞ்சம் அறிந்தோம். இது இரண்டாவது சுற்றுக்கான நேரம். இப்போது நாம் அதையே ஆழமாகப் படிக்கத் தொடங்குவோம். தரவுத்தளத்தில் உள்ள அட்டவணைகளின் நெடுவரிசைகளுக்கு நிறுவன வகுப்பின் புலங்களை வரைபடமாக்குவதன் மூலம் தொடங்குவோம்.
உங்களுக்கு ஏற்கனவே தெரியும், ஒரு நிறுவன வகுப்பில் உள்ள புலத்தை ஒரு நெடுவரிசைக்கு மேப்பிங் செய்வது @Column சிறுகுறிப்பைப் பயன்படுத்தி செய்யப்படுகிறது . இப்போது கேள்வி என்னவென்றால்: அத்தகைய சிறுகுறிப்பு மூலம் எந்த வகையான புலங்களை வரைபடமாக்க முடியும்?
ஜாவாவில் உள்ள அனைத்து தரவு வகைகளையும் மூன்று குழுக்களாக பிரிக்கலாம்:
- வகை மிகவும் எளிமையானது மற்றும் தரவுத்தளத்தில் சேமிக்க எளிதானது .
- வகை சிக்கலானது மற்றும் அதற்கு நீங்கள் ஒரு சிறப்பு மாற்றி எழுத வேண்டும் .
- வகை மிகவும் சிக்கலானது மற்றும் அதன் மதிப்புகளைச் சேமிக்க தனி அட்டவணை தேவை .
Hibernate எப்படி சேமிப்பது என்பதை அறியும் எளிய வகைகள்:
ஜாவாவில் வகைகள் | தொகுப்பு | வகுப்பு எடுத்துக்காட்டுகள் |
---|---|---|
பழமையான ஜாவா வகைகள் | பூலியன் , முழு எண்ணாக , இரட்டை , முதலியன | |
பழமையானவற்றின் மேல் போர்வைகள் | java.lang | பூலியன் , முழு எண் , இரட்டை , முதலியன |
சரங்கள் | java.lang | லேசான கயிறு |
"மேம்பட்ட" எண்கள் | java.math | BigInteger மற்றும் BigDecimal |
தேதி மற்றும் நேரம் | java.time | LocalDate , LocalTime , LocalDateTime , OffsetTime , OffsetDateTime , உடனடித் தேதி |
பல்வேறு தேதி மற்றும் நேர மாறுபாடுகள் | java.util | தேதி மற்றும் காலண்டர் |
பழைய தேதி மற்றும் நேர வடிவங்கள் | java.sql | தேதி , நேரம் , நேர முத்திரை |
பைட்டுகள் அல்லது எழுத்துகளின் வரிசை | பைட்[] அல்லது பைட்[] , எழுத்து[] அல்லது எழுத்து[] | |
எனம்ஸ் | எந்த எண்ணும் | |
வரிசைப்படுத்தக்கூடிய பொருள்கள் | 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;
}
கைமுறை வகை ஒதுக்கீடுகள் - @வகை சிறுகுறிப்பு
சில நேரங்களில் நீங்கள் Hibernate இன் கொள்கையை சிதைக்க விரும்பலாம் மற்றும் தரவுத்தளத்தில் எந்த வகையான தரவைச் சேமிக்க வேண்டும் என்பதை வெளிப்படையாகக் கூறலாம். எடுத்துக்காட்டாக, உங்கள் நிறுவன வகுப்பில் முழு எண் வகையின் புலம் உள்ளது, ஆனால் அடித்தளத்தில் VARCHAR வகையுடன் ஒரு நெடுவரிசை உள்ளது.
இதற்கு ஒரு சிறப்பு குறிப்பு உள்ளது - @ வகை . இது மிகவும் எளிமையானதாக தோன்றுகிறது:
@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;
}
உங்கள் புதிய வகைக்கு தேதி வகையை எப்படி மாற்றுவது என்பதை Hibernate கண்டுபிடித்திருந்தால், அது அதைச் செய்யும். அது புரியவில்லை என்றால், நீங்கள் ஒரு சிறப்பு வகை மாற்றியைக் குறிப்பிட வேண்டும். ஆனால் பின்னர் அதைப் பற்றி மேலும்.
தரவுத்தளங்களுக்கான ஹைபர்னேட் வகைகளின் பட்டியல்
சொல்லப்போனால், org.hibernate.type.StringType வகையை நாங்கள் குறிப்பிட்டுள்ளதை நீங்கள் கவனித்தீர்களா, சரம் அல்ல . ஏனென்றால், ஜாவா மொழியால் அல்ல, DBMS ஆல் ஆதரிக்கப்படும் வகைகளில் ஒன்றைத் தேர்ந்தெடுத்துள்ளோம். அவை ஒவ்வொன்றும் அதன் சொந்த வகை அமைப்பைக் கொண்டுள்ளன. ஹைபர்னேட் டெவலப்பர்கள் இந்த VARCHAR களுக்குப் பதிலாக வசதியான ஜாவா பாணி பெயர்களைக் கொண்டு வந்தனர்.
மூலம், இந்த பட்டியல் மிகவும் சிறியதாக இல்லை. அதன் ஒரு பகுதியை இங்கே தருகிறேன்:
ஹைபர்னேட் வகை (org.hibernate.type தொகுப்பு) | JDBC வகை | ஜாவா வகை | BasicTypeRegistry key(கள்) |
---|---|---|---|
சரம் வகை | வர்ச்சர் | java.lang.string | சரம், java.lang.string |
பொருளாக்கப்பட்ட துணி | கிளப் | java.lang.string | பொருள் |
உரை வகை | லாங்வார்ச்சார் | java.lang.string | உரை |
எழுத்து வகை | சார் | சார், ஜாவா.லாங்.கேரக்டர் | சார், ஜாவா.லாங்.கேரக்டர் |
பூலியன் வகை | பிட் | பூலியன், ஜாவா.லாங்.பூலியன் | பூலியன், ஜாவா.லாங்.பூலியன் |
எண் பூலியன் வகை | INTEGER, 0 தவறானது, 1 உண்மை | பூலியன், ஜாவா.லாங்.பூலியன் | எண்_பூலியன் |
YesNoType | CHAR, 'N'/'n' தவறானது, 'Y'/'y' உண்மை. பெரிய எழுத்து மதிப்பு தரவுத்தளத்தில் எழுதப்பட்டுள்ளது. | பூலியன், ஜாவா.லாங்.பூலியன் | ஆ ம் இல்லை |
TrueFalseType | CHAR, 'F'/'f' தவறானது, 'T'/'t' உண்மை. பெரிய எழுத்து மதிப்பு தரவுத்தளத்தில் எழுதப்பட்டுள்ளது. | பூலியன், ஜாவா.லாங்.பூலியன் | சரி தவறு |
பைட் வகை | TINYINT | பைட், ஜாவா.லாங்.பைட் | பைட், ஜாவா.லாங்.பைட் |
குறுகிய வகை | SMALLINT | குறுகிய, java.lang.Short | குறுகிய, java.lang.Short |
முழுமை வகைகள் | முழு | int, java.lang.Integer | int, java.lang.Integer |
நீண்ட வகை | பெரியது | நீண்ட, java.lang.Long | நீண்ட, java.lang.Long |
மிதவை வகை | மிதவை | மிதவை, java.lang.Float | மிதவை, java.lang.Float |
இரட்டை வகை | இரட்டை | இரட்டை, java.lang.Double | இரட்டை, java.lang.Double |
BigIntegerType | NUMERIC | java.math.BigInteger | பெரிய_முழு எண், java.math.BigInteger |
பிக்டெசிமல் வகை | NUMERIC | java.math.BigDecimal | பெரிய_தசமம், java.math.bigDecimal |
நேர முத்திரை வகை | நேர முத்திரை | java.sql.timestamp | நேர முத்திரை, java.sql.timestamp |
நேர வகை | நேரம் | java.sql.Time | நேரம், java.sql.Time |
தேதி வகை | DATE | java.sql.date | தேதி, java.sql.date |
காலண்டர் வகை | நேர முத்திரை | java.util.Calendar | காலண்டர், java.util.Calendar |
நாள்காட்டி தேதி வகை | DATE | java.util.Calendar | நாள்காட்டி_தேதி |
நாணய வகை | java.util.Currency | வர்ச்சர் | நாணயம், java.util.Currency |
உள்ளூர் வகை | வர்ச்சர் | java.util.locale | லோகேல், java.utility.locale |
நேர மண்டல வகை | VARCHAR, TimeZone ஐடியைப் பயன்படுத்துகிறது | java.util.TimeZone | நேர மண்டலம், java.util.TimeZone |
UrlType | வர்ச்சர் | java.net.URL | url, java.net.URL |
வகுப்பு வகை | VARCHAR(வகுப்பு FQN) | java.lang.Class | வகுப்பு, java.lang.Class |
அட்டவணை, நிச்சயமாக, பெரியது, ஆனால் மிகவும் பயனுள்ளதாக இருக்கும். எடுத்துக்காட்டாக, பூலியன் வகையை குறைந்தது ஆறு வெவ்வேறு வழிகளில் தரவுத்தளத்தில் சேமிக்க முடியும் என்பது தெளிவாகிறது. உங்களுக்கு இவ்வளவு தேவையில்லையா? நீங்கள் சேமிக்கும் வழியைத் தேர்வு செய்கிறீர்கள் என்று யார் சொன்னது?
SQL இல் பூலியன் வகை எதுவும் இல்லை, இது பெரும்பாலும் இவ்வாறு சேமிக்கப்படுகிறது:
- 1 அல்லது 0
- 'எஃப்' அல்லது 'டி'
- 'Y' அல்லது 'N'
எனவே, ஹைபர்னேட் இந்த எல்லா பிரச்சனைகளையும் புரிந்துகொள்வது மிகவும் நல்லது. அல்லது, எடுத்துக்காட்டாக, தரவுத்தளத்தில் உள்ள தரவு வரிசைகளின் சேமிப்பகத்தை எடுத்துக் கொள்வோம். பல்வேறு விருப்பங்கள் உள்ளன, மேலும் அவை அனைத்தையும் எவ்வாறு கையாள்வது என்பதை ஹைபர்னேட் அறிந்திருக்கிறது:
ஹைபர்னேட் வகை (org.hibernate.type தொகுப்பு) | JDBC வகை | ஜாவா வகை | அடிப்படை வகைப் பதிவு |
---|---|---|---|
குமிழ் வகை | BLOB | java.sql.blob | வலைப்பதிவு, java.sql.blob |
clobtype | கிளப் | java.sql.clob | clob, java.sql.clob |
பைனரி வகை | வார்பினரி | பைட்[] | பைனரி, பைட்[] |
மெட்டீரியலைஸ்டு ப்ளாப் வகை | BLOB | பைட்[] | materized_blob |
பட வகை | நீண்ட வார்பினரி | பைட்[] | படம் |
ரேப்பர் பைனரி வகை | வார்பினரி | java.lang.Byte[] | wrapper-binary, Byte[], java.lang.Byte[] |
CharArrayType | வர்ச்சர் | கரி[] | எழுத்துக்கள், கரி[] |
கேரக்டர்அரே வகை | வர்ச்சர் | java.lang.Character[] | wrapper-characters, Character[], java.lang.Character[] |
UUIDபைனரி வகை | பைனரி | java.util.UUID | uuid-பைனரி, java.util.UUID |
UUIDCharType | CHAR, VARCHAR ஐயும் படிக்கலாம் | java.util.UUID | uuid-char |
PostgreSQLUUID வகை | PostgreSQL UUID, வகைகள்#OTHER மூலம், இது PostgreSQL JDBC இயக்கி வரையறைக்கு இணங்குகிறது | java.util.UUID | pg-uuid |
ஹைபர்னேட் வகை (org.hibernate.type தொகுப்பு) | JDBC வகை | ஜாவா வகை | அடிப்படை வகைப் பதிவு |
---|---|---|---|
கால வகை | பெரியது | java.time.Duration | காலம், java.time.Duration |
உடனடி வகை | நேர முத்திரை | java.time.Instant | உடனடி, java.time.Instant |
உள்ளூர் தேதி நேர வகை | நேர முத்திரை | java.time.LocalDateTime | LocalDateTime, java.time.LocalDateTime |
உள்ளூர் தேதி வகை | DATE | java.time.LocalDate | LocalDate, java.time.LocalDate |
உள்ளூர் நேர வகை | நேரம் | java.time.LocalTime | உள்ளூர் நேரம், java.time.LocalTime |
ஆஃப்செட் தேதி நேர வகை | நேர முத்திரை | java.time.OffsetDateTime | OffsetDateTime, java.time.OffsetDateTime |
ஆஃப்செட் டைம் வகை | நேரம் | java.time.OffsetTime | OffsetTime, java.time.OffsetTime |
ஆஃப்செட் டைம் வகை | நேர முத்திரை | java.time.ZonedDateTime | ZonedDateTime, java.time.ZonedDateTime |
GO TO FULL VERSION