সমর্থিত ডেটা প্রকার

আগের তিনটি স্তরের সময়, আমরা হাইবারনেটের সাথে একটু পরিচিত হয়েছি। এখন দ্বিতীয় রাউন্ডের সময়। এখন আমরা একই জিনিস অধ্যয়ন শুরু করব, শুধুমাত্র গভীরভাবে। এবং আমরা ডাটাবেসের টেবিলের কলামে এন্টিটি ক্লাসের ক্ষেত্রগুলি ম্যাপ করে শুরু করব।

আপনি ইতিমধ্যেই জানেন, একটি কলামে একটি সত্তা ক্লাসে একটি ক্ষেত্র ম্যাপ করা @কলাম টীকা ব্যবহার করে করা হয় । এবং এখন প্রশ্ন হল: এই ধরনের টীকা দিয়ে কি ধরনের ক্ষেত্র ম্যাপ করা যেতে পারে?

জাভাতে সমস্ত ডেটা টাইপ তিনটি গ্রুপে বিভক্ত করা যেতে পারে:

  • টাইপটি বেশ সহজ এবং একটি ডাটাবেসে সংরক্ষণ করা সহজ
  • ধরনটি জটিল এবং এর জন্য আপনাকে একটি বিশেষ রূপান্তরকারী লিখতে হবে ।
  • ধরনটি খুবই জটিল এবং এর মান সঞ্চয় করার জন্য একটি পৃথক টেবিলের প্রয়োজন

হাইবারনেট কীভাবে সঞ্চয় করতে জানে সেগুলির মধ্যে রয়েছে:

জাভা টাইপ প্যাকেজ ক্লাসের উদাহরণ
আদিম জাভা প্রকার বুলিয়ান , int , ডবল , ইত্যাদি
আদিম উপর wrappers java.lang বুলিয়ান , ইন্টিজার , ডাবল , ইত্যাদি
স্ট্রিংস java.lang স্ট্রিং
"উন্নত" সংখ্যা java.math BigInteger এবং BigDecimal
তারিখ এবং সময় java.time লোকাল ডেট , লোকালটাইম , লোকাল ডেট টাইম , অফসেটটাইম , অফসেট ডেট টাইম , ইনস্ট্যান্ট
বিভিন্ন তারিখ এবং সময়ের তারতম্য java.util তারিখ এবং ক্যালেন্ডার
পুরানো তারিখ এবং সময় বিন্যাস java.sql তারিখ , সময় , টাইমস্ট্যাম্প
বাইট বা অক্ষরের অ্যারে বাইট[] বা বাইট[] , চর[] বা অক্ষর[]
এনামস যে কোন enum
সিরিয়ালাইজেবল অবজেক্ট java.io.Serializable এর যেকোনো বাস্তবায়ন

এসকিউএল ভাষায় এই সমস্ত প্রকারের তাদের প্রতিরূপ রয়েছে, তাই হাইবারনেট জানে কিভাবে ডাটাবেস থেকে সেগুলি সঞ্চয় এবং লোড করতে হয়।

উদাহরণ:

@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="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 প্রকার জাভা টাইপ বেসিক টাইপরেজিস্ট্রি কী(গুলি)
স্ট্রিং টাইপ ভার্চার java.lang.string স্ট্রিং, java.lang.string
বস্তুগত ক্লব CLOB java.lang.string materialized_clob
টেক্সট টাইপ লংভরচর java.lang.string পাঠ্য
চরিত্রের ধরন CHAR char, java.lang.Character char, java.lang.Character
বুলিয়ান টাইপ বিট বুলিয়ান, java.lang.বুলিয়ান বুলিয়ান, java.lang.বুলিয়ান
নিউমেরিক বুলিয়ান টাইপ পূর্ণসংখ্যা, 0 মিথ্যা, 1 সত্য বুলিয়ান, java.lang.বুলিয়ান সংখ্যাসূচক_বুলিয়ান
হ্যাঁ না টাইপ CHAR, 'N'/'n' মিথ্যা, 'Y'/'y' সত্য। বড় হাতের মান ডাটাবেসে লেখা হয়। বুলিয়ান, java.lang.বুলিয়ান হ্যাঁ না
TrueFalseType CHAR, 'F'/'f' মিথ্যা, 'T'/'t' সত্য। বড় হাতের মান ডাটাবেসে লেখা হয়। বুলিয়ান, java.lang.বুলিয়ান সত্য মিথ্যা
বাইট টাইপ TINYINT বাইট, java.lang.Byte বাইট, java.lang.Byte
সংক্ষিপ্ত প্রকার ছোট সংক্ষিপ্ত, java.lang.Short সংক্ষিপ্ত, java.lang.Short
পূর্ণসংখ্যার প্রকার পূর্ণসংখ্যা int, java.lang.Integer int, java.lang.Integer
দীর্ঘ প্রকার বড় দীর্ঘ, java.lang.লং দীর্ঘ, java.lang.লং
ভাসমান প্রকার ভাসা float, java.lang.float 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 টাইমস্ট্যাম্প, java.sql.timestamp
টাইপ টাইপ টাইম java.sql.Time সময়, java.sql.Time
তারিখ প্রকার তারিখ java.sql.date তারিখ, java.sql.date
ক্যালেন্ডার টাইপ টাইমস্ট্যাম্প java.util.ক্যালেন্ডার ক্যালেন্ডার, java.util.ক্যালেন্ডার
ক্যালেন্ডার তারিখের ধরন তারিখ java.util.ক্যালেন্ডার ক্যালেন্ডার_তারিখ
মুদ্রার ধরন java.util.মুদ্রা ভার্চার মুদ্রা, java.util.মুদ্রা
লোকেল টাইপ ভার্চার java.util.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. Class ক্লাস, 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 ভার্চার চর[] অক্ষর, চর[]
ক্যারেক্টার অ্যারে টাইপ ভার্চার java.lang.অক্ষর[] মোড়ক-অক্ষর, অক্ষর[], java.lang.Character[]
UUIDBinaryType বাইনারি java.util.UUID uuid-বাইনারী, java.util.UUID
UUIDCharType CHAR, এছাড়াও VARCHAR পড়তে পারেন java.util.UUID uuid-char
PostgreSQLUUIDT টাইপ 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
LocalDateTimeType টাইমস্ট্যাম্প java.time.LocalDateTime LocalDateTime, java.time.LocalDateTime
LocalDateType তারিখ java.time.LocalDate LocalDate, java.time.LocalDate
LocalTimeType টাইম java.time.LocalTime LocalTime, java.time.LocalTime
OffsetDateTimeType টাইমস্ট্যাম্প java.time.OffsetDateTime OffsetDateTime, java.time.OffsetDateTime
অফসেটটাইম টাইপ টাইম java.time.OffsetTime অফসেটটাইম, java.time.OffsetTime
অফসেটটাইম টাইপ টাইমস্ট্যাম্প java.time.ZonedDateTime ZonedDateTime, java.time.ZonedDateTime