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 |
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 |