మద్దతు ఉన్న డేటా రకాలు

మునుపటి మూడు స్థాయిలలో, మేము హైబర్నేట్‌తో కొంచెం పరిచయం పొందాము. ఇది రెండవ రౌండ్‌కు సమయం. ఇప్పుడు మనం అదే విషయాన్ని అధ్యయనం చేయడం ప్రారంభిస్తాము, లోతుగా మాత్రమే. మరియు మేము ఎంటిటీ క్లాస్ యొక్క ఫీల్డ్‌లను డేటాబేస్‌లోని పట్టికల నిలువు వరుసలకు మ్యాప్ చేయడం ద్వారా ప్రారంభిస్తాము.

మీకు ఇప్పటికే తెలిసినట్లుగా, ఎంటిటీ క్లాస్‌లోని ఫీల్డ్‌ని నిలువు వరుసకు మ్యాపింగ్ చేయడం @Column ఉల్లేఖనాన్ని ఉపయోగించి చేయబడుతుంది . మరియు ఇప్పుడు ప్రశ్న: అటువంటి ఉల్లేఖనంతో ఏ రకమైన ఫీల్డ్‌లను మ్యాప్ చేయవచ్చు?

జావాలోని అన్ని డేటా రకాలను మూడు గ్రూపులుగా విభజించవచ్చు:

  • రకం చాలా సులభం మరియు డేటాబేస్లో నిల్వ చేయడం సులభం .
  • రకం సంక్లిష్టమైనది మరియు మీరు దాని కోసం ప్రత్యేక కన్వర్టర్‌ను వ్రాయాలి .
  • రకం చాలా క్లిష్టమైనది మరియు దాని విలువలను నిల్వ చేయడానికి ప్రత్యేక పట్టిక అవసరం .

హైబర్నేట్ ఎలా నిల్వ చేయాలో తెలిసిన సాధారణ రకాలు:

జావాలో రకాలు ప్యాకేజీ తరగతి ఉదాహరణలు
ఆదిమ జావా రకాలు boolean , int , double , etc.
ఆదిమానవుల మీద చుట్టలు java.lang బూలియన్ , పూర్ణాంకం , డబుల్ , మొదలైనవి.
తీగలు java.lang స్ట్రింగ్
"అధునాతన" సంఖ్యలు java.math BigInteger మరియు BigDecimal
తేదీ మరియు సమయం java.time లోకల్‌డేట్ , లోకల్ టైమ్ , లోకల్ డేట్ టైమ్ , ఆఫ్‌సెట్ టైమ్ , ఆఫ్‌సెట్ డేట్ టైమ్ , ఇన్‌స్టంట్
వివిధ తేదీ మరియు సమయ వ్యత్యాసాలు 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;
}

మాన్యువల్ రకం అసైన్‌మెంట్‌లు - @రకం ఉల్లేఖన

కొన్నిసార్లు మీరు హైబర్నేట్ విధానాన్ని తారుమారు చేయాలనుకోవచ్చు మరియు డేటాబేస్‌లో డేటాను ఏ రకాన్ని నిల్వ చేయాలో స్పష్టంగా చెప్పండి. ఉదాహరణకు, మీరు మీ ఎంటిటీ క్లాస్ రకం పూర్ణాంకంలో ఫీల్డ్‌ని కలిగి ఉన్నారు, కానీ బేస్‌లో దాని కోసం 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;
}

తేదీ రకాన్ని మీ కొత్త రకానికి ఎలా మార్చుకోవాలో హైబర్నేట్ గుర్తించినట్లయితే, అది అలా చేస్తుంది. ఇది అర్థం కాకపోతే, మీరు ప్రత్యేక రకం కన్వర్టర్‌ను పేర్కొనాలి. కానీ తరువాత దాని గురించి మరింత.

డేటాబేస్‌ల కోసం హైబర్నేట్ రకాల జాబితా

మార్గం ద్వారా, మేము స్ట్రింగ్ కాకుండా org.hibernate.type.StringType రకాన్ని పేర్కొన్నామని మీరు గమనించారా . ఎందుకంటే మేము జావా భాష ద్వారా కాకుండా DBMS ద్వారా మద్దతు ఇచ్చే రకాల్లో ఒకదాన్ని ఎంచుకున్నాము. వాటిలో ప్రతి దాని స్వంత రకం వ్యవస్థ ఉంటుంది. హైబర్నేట్ డెవలపర్లు ఈ VARCHARలకు బదులుగా అనుకూలమైన జావా-శైలి పేర్లతో ముందుకు వచ్చారు.

మార్గం ద్వారా, ఈ జాబితా చాలా చిన్నది కాదు. నేను దానిలో కొంత భాగాన్ని ఇక్కడ ఇస్తాను:

హైబర్నేట్ రకం (org.hibernate.type ప్యాకేజీ) JDBC రకం జావా రకం BasicTypeRegistry కీ(లు)
స్ట్రింగ్ టైప్ వర్చర్ java.lang.string స్ట్రింగ్, java.lang.string
వస్తురూపం దాల్చింది CLOB java.lang.string మెటీరియలైజ్డ్_క్లాబ్
టెక్స్ట్ రకం లాంగ్వార్చార్ java.lang.string వచనం
పాత్ర రకం చార్ చార్, జావా.లాంగ్. క్యారెక్టర్ చార్, జావా.లాంగ్. క్యారెక్టర్
బూలియన్ రకం బిట్ బూలియన్, జావా.లాంగ్.బూలియన్ బూలియన్, జావా.లాంగ్.బూలియన్
సంఖ్యా బూలియన్ రకం INTEGER, 0 తప్పు, 1 నిజం బూలియన్, జావా.లాంగ్.బూలియన్ సంఖ్యా_బూలియన్
YesNoType CHAR, 'N'/'n' తప్పు, 'Y'/'y' నిజం. పెద్ద అక్షరం విలువ డేటాబేస్కు వ్రాయబడింది. బూలియన్, జావా.లాంగ్.బూలియన్ అవును కాదు
TrueFalseType CHAR, 'F'/'f' తప్పు, 'T'/'t' నిజం. పెద్ద అక్షరం విలువ డేటాబేస్కు వ్రాయబడింది. బూలియన్, జావా.లాంగ్.బూలియన్ ఒప్పు తప్పు
బైట్ టైప్ TINYINT బైట్, java.lang.Byte బైట్, java.lang.Byte
చిన్న రకం SMALLINT చిన్న, java.lang.Short చిన్న, java.lang.Short
పూర్ణాంక రకాలు పూర్ణ సంఖ్య int, java.lang. Integer int, java.lang. Integer
పొడవైన రకం పెద్ద పొడవు, java.lang.Long పొడవు, java.lang.Long
ఫ్లోట్ రకం ఫ్లోట్ ఫ్లోట్, జావా.లాంగ్.ఫ్లోట్ ఫ్లోట్, జావా.లాంగ్.ఫ్లోట్
డబుల్ రకం డబుల్ డబుల్, 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
సమయ రకం TIME 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.కరెన్సీ వర్చర్ కరెన్సీ, java.util.Currency
స్థానిక రకం వర్చర్ java.util.locale లొకేల్, java.utility.locale
టైమ్‌జోన్ రకం VARCHAR, టైమ్‌జోన్ IDని ఉపయోగిస్తోంది 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
  • 'F' లేదా 'T'
  • 'Y' లేదా 'N'

అందువల్ల, హైబర్నేట్ ఈ ఇబ్బందులన్నింటినీ అర్థం చేసుకున్నప్పుడు చాలా మంచిది. లేదా, ఉదాహరణకు, డేటాబేస్‌లోని డేటా శ్రేణుల నిల్వను తీసుకుందాం. విభిన్న ఎంపికల సమూహం ఉన్నాయి మరియు వాటితో ఎలా పని చేయాలో హైబర్నేట్‌కు తెలుసు:

హైబర్నేట్ రకం (org.hibernate.type ప్యాకేజీ) JDBC రకం జావా రకం బేసిక్ టైప్ రిజిస్టర్
బొట్టు రకం BLOB java.sql.blob బ్లాగ్, java.sql.blob
clobtype CLOB java.sql.clob clob, java.sql.clob
బైనరీ టైప్ వర్బినరీ బైట్[] బైనరీ, బైట్[]
మెటీరియలైజ్డ్ బ్లాబ్ టైప్ BLOB బైట్[] మెటరైజ్డ్_బొట్టు
చిత్రం రకం లాంగ్వర్బినరీ బైట్[] చిత్రం
రేపర్ బైనరీ టైప్ వర్బినరీ java.lang.Byte[] రేపర్-బైనరీ, బైట్[], java.lang.Byte[]
CharArrayType వర్చర్ చార్[] అక్షరాలు, చార్[]
అక్షర శ్రేణి రకం వర్చర్ java.lang.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 విడుదలైనప్పటి నుండి, హైబర్నేట్ మరికొన్ని సమయ-సంబంధిత రకాలను జోడించింది. అన్నీ మీ జీవితాన్ని సులభతరం చేయడానికి. ఈ కొత్త వింతైన రకాలు అన్నీ సపోర్ట్ చేయబడిందా అని మీరు ఇకపై ఆశ్చర్యపోనవసరం లేదు. హైబర్నేట్ సృష్టికర్తలు ఇప్పటికే మీ కోసం తమ మద్దతును జోడించారు:
హైబర్నేట్ రకం (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
స్థానిక సమయం రకం TIME java.time.LocalTime LocalTime, java.time.LocalTime
ఆఫ్‌సెట్ డేట్ టైమ్ టైప్ టైమ్‌స్టాంప్ java.time.OffsetDateTime ఆఫ్‌సెట్ డేట్ టైమ్, java.time.OffsetDateTime
ఆఫ్‌సెట్ టైమ్ టైప్ TIME java.time.OffsetTime ఆఫ్‌సెట్ టైమ్, java.time.OffsetTime
ఆఫ్‌సెట్ టైమ్ టైప్ టైమ్‌స్టాంప్ java.time.ZonedDateTime ZonedDateTime, java.time.ZonedDateTime