সমর্থিত ডেটা প্রকার
আগের তিনটি স্তরের সময়, আমরা হাইবারনেটের সাথে একটু পরিচিত হয়েছি। এখন দ্বিতীয় রাউন্ডের সময়। এখন আমরা একই জিনিস অধ্যয়ন শুরু করব, শুধুমাত্র গভীরভাবে। এবং আমরা ডাটাবেসের টেবিলের কলামে এন্টিটি ক্লাসের ক্ষেত্রগুলি ম্যাপ করে শুরু করব।
আপনি ইতিমধ্যেই জানেন, একটি কলামে একটি সত্তা ক্লাসে একটি ক্ষেত্র ম্যাপ করা @কলাম টীকা ব্যবহার করে করা হয় । এবং এখন প্রশ্ন হল: এই ধরনের টীকা দিয়ে কি ধরনের ক্ষেত্র ম্যাপ করা যেতে পারে?
জাভাতে সমস্ত ডেটা টাইপ তিনটি গ্রুপে বিভক্ত করা যেতে পারে:
- টাইপটি বেশ সহজ এবং একটি ডাটাবেসে সংরক্ষণ করা সহজ ।
- ধরনটি জটিল এবং এর জন্য আপনাকে একটি বিশেষ রূপান্তরকারী লিখতে হবে ।
- ধরনটি খুবই জটিল এবং এর মান সঞ্চয় করার জন্য একটি পৃথক টেবিলের প্রয়োজন ।
হাইবারনেট কীভাবে সঞ্চয় করতে জানে সেগুলির মধ্যে রয়েছে:
জাভা টাইপ | প্যাকেজ | ক্লাসের উদাহরণ |
---|---|---|
আদিম জাভা প্রকার | বুলিয়ান , 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 |
হাইবারনেট টাইপ (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 |
GO TO FULL VERSION