ஆதரிக்கப்படும் தரவு வகைகள்

முந்தைய மூன்று நிலைகளின் போது, ​​நாங்கள் 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
மேலும் JDK 8 வெளியானதிலிருந்து, Hibernate மேலும் சில நேரம் தொடர்பான வகைகளைச் சேர்த்துள்ளது. எல்லாம் உங்கள் வாழ்க்கையை எளிதாக்க. இந்த புதுவிதமான வகைகள் அனைத்தும் ஆதரிக்கப்படுமா என்று நீங்கள் இனி யோசிக்க வேண்டியதில்லை. Hibernate இன் படைப்பாளிகள் ஏற்கனவே உங்களுக்கான ஆதரவைச் சேர்த்துள்ளனர்:
ஹைபர்னேட் வகை (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