Jinis data sing didhukung

Sajrone telung tingkat sadurunge, kita wis kenal karo Hibernate. Wektu kanggo babak kapindho. Saiki kita bakal miwiti sinau bab sing padha, mung luwih jero. Lan kita bakal miwiti pemetaan lapangan kelas Entitas menyang kolom tabel ing database.

Kaya sing wis dingerteni, pemetaan lapangan ing kelas Entitas menyang kolom ditindakake kanthi nggunakake anotasi @Column . Lan saiki pitakonan: apa jinis lapangan bisa dipetakan karo anotasi kuwi?

Kabeh jinis data ing Jawa bisa dipérang dadi telung klompok:

  • Jinis kasebut cukup prasaja lan gampang disimpen ing basis data .
  • Jinis kasebut rumit lan sampeyan kudu nulis konverter khusus .
  • Jinis iki rumit banget lan mbutuhake tabel sing kapisah kanggo nyimpen nilai .

Jinis prasaja sing Hibernate ngerti carane nyimpen kalebu:

Jinis ing Jawa paket Tuladha kelas
Jinis Jawa Primitif boolean , int , dobel , lsp.
Wrappers liwat primitif jawa.lang Boolean , Integer , Double , etc.
strings jawa.lang String
"Advanced" nomer java.matematika BigInteger lan BigDecimal
tanggal lan wektu java.wektu LocalDate , LocalTime , LocalDateTime , OffsetTime , OffsetDateTime , Instan
Macem-macem variasi tanggal lan wektu java.util tanggal lan tanggalan
Format tanggal lan wektu lawas java.sql Tanggal , Wektu , Timestamp
Array bait utawa karakter byte[] utawa Byte[] , char[] utawa Character[]
Enum Sembarang enum
Obyek serializable Sembarang implementasine java.io.Serializable

Kabeh jinis iki duwe mitra ing basa SQL, mula Hibernate ngerti carane nyimpen lan mbukak saka database.

Tuladha:

@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;
}

Penugasan jinis manual - anotasi @Type

Kadhangkala sampeyan pengin ngrusak kabijakan Hibernate lan kanthi jelas ngandhani jinis apa kanggo nyimpen data ing basis data. Contone, sampeyan duwe lapangan ing kelas Entitas saka jinis Integer, nanging ing basis ana kolom karo jinis VARCHAR.

Ana anotasi khusus kanggo iki - @Type . Iku katon banget prasaja:

@Type(type="type-name")

Ayo, contone, takon Hibernate kanggo nggawe lapangandigaweTanggalkelas Panganggo kita disimpen ing database minangka string:

@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;
}

Yen Hibernate ngerti carane ngowahi jinis Tanggal menyang jinis anyar sampeyan, mula mung bakal ditindakake. Yen ora ngerti, sampeyan kudu nemtokake jinis konverter khusus. Nanging luwih ing mengko.

Dhaptar jinis Hibernate kanggo database

Miturut cara, apa sampeyan sok dong mirsani sing kita nemtokake jinis org.hibernate.type.StringType , ora String . Iki amarga kita wis milih salah siji saka jinis didhukung dening DBMS lan ora dening basa Jawa. Saben wong duwe sistem jinis dhewe. Mung wae para pangembang Hibernate nggawe jeneng gaya Jawa sing trep tinimbang VARCHAR iki.

Miturut cara, dhaptar iki ora cilik. Aku bakal menehi bagean ing kene:

Tipe hibernate (paket org.hibernate.type) Tipe JDBC jinis Jawa BasicTypeRegistry key(s)
StringType VARCHAR java.lang.string string, jawa.lang.string
kawujud clob CLOB java.lang.string materialized_clob
Tipe Teks LONGVARCHAR java.lang.string teks
jinis karakter CHAR char, java.lang.Character char, java.lang.Character
BooleanType dicokot boolean, java.lang.Boolean boolean, java.lang.Boolean
NumericBooleanType INTEGER, 0 salah, 1 bener boolean, java.lang.Boolean numeric_boolean
YesNoType CHAR, 'N'/'n' salah, 'Y'/'y' bener. Nilai huruf gedhe ditulis ing database. boolean, java.lang.Boolean ya_ora
TrueFalseType CHAR, 'F'/'f' salah, 'T'/'t' bener. Nilai huruf gedhe ditulis ing database. boolean, java.lang.Boolean bener_salah
ByteType TINYINT byte, java.lang.Byte byte, java.lang.Byte
jinis cendhak Cilik singkat, java.lang.Short singkat, java.lang.Short
Tipe Integer ONGKO int, java.lang.Integer int, java.lang.Integer
jinis dawa BIGINT long, java.lang.Long long, java.lang.Long
jinis float NGAMUNG float, java.lang.Float float, java.lang.Float
jinis pindho GANDA double, java.lang.Double double, java.lang.Double
BigIntegerType NUMERIK java.math.BigInteger big_integer, java.math.BigInteger
BigDecimalType NUMERIK java.math.BigDecimal big_decimal, java.math.bigDecimal
TimestampType TIMESTAMP java.sql.timestamp timestamp, java.sql.timestamp
Tipe Wektu WAKTU java.sql.Wektu wektu, java.sql.Wektu
jinis tanggal TANGGAL java.sql.date date, java.sql.date
CalendarType TIMESTAMP java.util.Calendar calendar, java.util.Calendar
CalendarDateType TANGGAL java.util.Calendar tanggalan_tanggal
CurrencyType java.util.Currency VARCHAR currency, java.util.Currency
LocaleType VARCHAR java.util.locale locale, java.utility.locale
TimeZoneType VARCHAR, nggunakake ID TimeZone java.util.TimeZone timezone, java.util.TimeZone
UrlType VARCHAR java.net.URL url, java.net.URL
jinis kelas VARCHAR(kelas FQN) java.lang.Kelas class, java.lang.Class

Tabel, mesthi, gedhe, nanging migunani banget. Contone, iku cetha saka iku jinis Boolean bisa disimpen ing database ing paling enem cara beda. Apa sampeyan ora butuh sing akeh? Lan sing kandha yen sampeyan milih cara kanggo nyimpen?

Ora ana jinis Boolean ing SQL lan asring disimpen kaya iki:

  • 1 utawa 0
  • 'Bèntèng'
  • 'Y' utawa 'N'

Mula, apik banget nalika Hibernate ngerti kabeh masalah kasebut. Utawa, contone, ayo njupuk panyimpenan saka susunan data ing database. Ana macem-macem pilihan, lan Hibernate ngerti cara nggarap kabeh:

Tipe hibernate (paket org.hibernate.type) Tipe JDBC jinis Jawa BasicTypeRegistr
jinis blob BLOB java.sql.blob blog, java.sql.blob
jinis clob CLOB java.sql.clob clob, java.sql.clob
BinaryType VARBINAR byte [] biner, byte []
MaterializedBlobType BLOB byte [] materized_blob
Jinis Gambar LONGVARBINAR byte [] gambar
WrapperBinaryType VARBINAR java.lang.Byte[] wrapper-binary, Byte[], java.lang.Byte[]
CharArrayType VARCHAR aksara [] aksara, aksara []
CharacterArrayType VARCHAR java.lang.Karakter[] pambungkus-karakter, Aksara[], java.lang.Karakter[]
UUIDBinaryType BINARI java.util.UUID uuid-binary, java.util.UUID
UUIDCarType CHAR, uga bisa maca VARCHAR java.util.UUID uuid-char
PostgreSQLUUIDTtype PostgreSQL UUID, liwat Types#OTHER, sing tundhuk karo definisi driver PostgreSQL JDBC java.util.UUID pg-uid
Lan wiwit rilis JDK 8, Hibernate wis nambah sawetara jinis liyane sing gegandhengan karo wektu. Kabeh kanggo nggawe urip luwih gampang. Sampeyan ora maneh kudu wonder yen kabeh jinis newfangled iki didhukung. Pencipta Hibernate wis nambahake dhukungan kanggo sampeyan:
Tipe hibernate (paket org.hibernate.type) Tipe JDBC jinis Jawa BasicTypeRegistr
DurationType BIGINT jawa.wektu.Duration Duration, java.time.Duration
jinis cepet TIMESTAMP java.wektu.Instant Instant, java.time.Instant
LocalDateTimeType TIMESTAMP java.time.LocalDateTime LocalDateTime, java.time.LocalDateTime
LocalDateType TANGGAL java.time.LocalDate LocalDate, java.time.LocalDate
LocalTimeType WAKTU java.time.LocalTime LocalTime, java.time.LocalTime
OffsetDateTimeType TIMESTAMP java.time.OffsetDateTime OffsetDateTime, java.time.OffsetDateTime
OffsetTimeType WAKTU java.time.OffsetTime OffsetTime, java.time.OffsetTime
OffsetTimeType TIMESTAMP java.time.ZonedDateTime ZonedDateTime, java.time.ZonedDateTime