日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

hibernate数据类型_Hibernate类型初学者指南

發(fā)布時(shí)間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate数据类型_Hibernate类型初学者指南 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

hibernate數(shù)據(jù)類型

基本映射概念

學(xué)習(xí)Hibernate時(shí),許多人喜歡跳到父子關(guān)聯(lián),而無(wú)需掌握對(duì)象關(guān)系映射的基礎(chǔ)知識(shí)。 在開始對(duì)實(shí)體關(guān)聯(lián)進(jìn)行建模之前,了解各個(gè)實(shí)體的基本映射規(guī)則非常重要。

Hibernate類型

Hibernate類型是SQL類型和Java原語(yǔ)/對(duì)象類型之間的橋梁。


這些是Hibernate默認(rèn)支持的類型:

Hibernate類型(org.hibernate.type) JDBC類型 Java類型
StringType VARCHAR
物化球 CLOB
文字類型 LONGVARCHAR
角色類型 焦炭 字符或字符
布爾型 比特 布爾值還是布爾值
NumericBooleanType 整數(shù)(例如0 =假和1 =真) 布爾值還是布爾值
是否類型 CHAR(例如,“ N”或“ n” = false,“ Y”或“ y” = true) 布爾值還是布爾值
TrueFalseType CHAR(例如,“ F”或“ f” =否,“ T”或“ t” =真) 布爾值還是布爾值
字節(jié)類型 天音 字節(jié)或字節(jié)
短型 小靈通 短或短
整數(shù)類型 整數(shù) 整數(shù)或整數(shù)
長(zhǎng)型 比金特 長(zhǎng)或長(zhǎng)
浮動(dòng)類型 浮動(dòng) 浮動(dòng)或浮動(dòng)
雙重類型 雙倍或雙倍
BigIntegerType 數(shù)字 大整數(shù)
BigDecimalType 數(shù)字 大十進(jìn)制
時(shí)間戳類型 時(shí)間戳 java.sql.Timestamp或java.util.Date
時(shí)間類型 時(shí)間 java.sql.Time
日期類型 日期 java.sql.Date
CalendarType 時(shí)間戳 java.util.Calendar或java.util.GregorianCalendar
CalendarType 日期 java.util.Calendar或java.util.GregorianCalendar
貨幣類型 VARCHAR java.util.Currency
語(yǔ)言環(huán)境類型 VARCHAR java.util.Locale
時(shí)區(qū)類型 VARCHAR java.util.TimeZone
網(wǎng)址類型 VARCHAR java.net.URL
類類型 VARCHAR java.lang.Class
BlobType BLOB java.sql.Blob
ClobType CLOB java.sql.Clob
BinaryType VARBINARY 字節(jié)[]或字節(jié)[]
BinaryType BLOB 字節(jié)[]或字節(jié)[]
BinaryType LONGVARBINARY 字節(jié)[]或字節(jié)[]
BinaryType LONGVARBINARY 字節(jié)[]或字節(jié)[]
CharArrayType VARCHAR char []或Character []
UUIDBinaryType 二進(jìn)制 java.util.UUID
UUIDBinaryType CHAR或VARCHAR java.util.UUID
UUIDBinaryType PostgreSQL UUID java.util.UUID
SerializableType VARBINARY 可序列化

您將始終可以定義自己的自定義類型,我們將在以后的文章中看到。

嵌入式(aka組件)類型

您可以將多個(gè)列分組為特定的Java類型,從而可以在整個(gè)域模型中重復(fù)使用。 如果映射的Java對(duì)象始終依賴于某些外部實(shí)體,則可以為此類域模型映射選擇Embeddable類型。

一個(gè)Embeddable對(duì)象可能包含基本類型和關(guān)聯(lián)映射,但永遠(yuǎn)不能包含@Id。 可嵌入對(duì)象及其擁有的實(shí)體將被持久保存/刪除。

假設(shè)我們有下面SQL表:

CREATE TABLE entity_event(id BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1),entity_class VARCHAR(255),entity_id BIGINT,message VARCHAR(255),PRIMARY KEY (id));

我們可以將entity_class和entity_id分組為一個(gè)Embeddable對(duì)象,該對(duì)象將在兩個(gè)不同的擁有實(shí)體中使用。

Embeddable對(duì)象如下所示:

@Embeddable public class EntityIdentifier implements Serializable {@Column(name = "entity_id", nullable = true)private Long entityId;@Column(name = "entity_class", nullable = true)private Class entityClass;public EntityIdentifier() {}public EntityIdentifier(Class entityClass, Long entityId) {this.entityClass = entityClass;this.entityId = entityId;}public Class getEntityClass() { return entityClass; }public void setEntityClass(Class entityClass) { this.entityClass = entityClass; }public Long getEntityId() { return entityId; }public void setEntityId(Long entityId) { this.entityId = entityId; } }

關(guān)聯(lián)的Entity表將繼承Embeddable屬性的關(guān)聯(lián)列。

實(shí)體

實(shí)體與SQL表行的Java等效。 該實(shí)體必須包含一個(gè)@Id屬性,該屬性映射關(guān)聯(lián)的表主鍵。

應(yīng)用程序邏輯對(duì)實(shí)體屬性進(jìn)行更改,并將實(shí)體狀態(tài)更改(持久,合并,刪除)通知持久性上下文。 因此,持久性上下文會(huì)將所有實(shí)體更改轉(zhuǎn)換為SQL語(yǔ)句。

假設(shè)我們有以下SQL表:

CREATE TABLE entity_attribute(id BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1),entity_class VARCHAR(255),entity_id BIGINT,name VARCHAR(255),VALUE VARCHAR(255),PRIMARY KEY (id));CREATE TABLE entity_event(id BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1),entity_class VARCHAR(255),entity_id BIGINT,message VARCHAR(255),PRIMARY KEY (id));

由于兩個(gè)表都包含entity_class和entity_id列,因此我們可以使用EntityIdentifier Embeddable類型。

@Entity @Table(name = "entity_attribute") public class EntityAttribute {@Id@GeneratedValueprivate Long id;private String name;private String value;private EntityIdentifier entityIdentifier;public Long getId() { return id; }public String getName() { return name; }public void setName(String name) { this.name = name; }public String getValue() { return value; }public void setValue(String value) { this.value = value; }public EntityIdentifier getEntityIdentifier() { return entityIdentifier; }public void setEntityIdentifier(EntityIdentifier entityIdentifier) { this.entityIdentifier = entityIdentifier; } }@Entity @Table(name = "entity_event") public class EntityEvent {@Id@GeneratedValueprivate Long id;private String message;private EntityIdentifier entityIdentifier;public Long getId() { return id; }public String getMessage() { return message; }public void setMessage(String message) { this.message = message; }public EntityIdentifier getEntityIdentifier() { return entityIdentifier; }public void setEntityIdentifier(EntityIdentifier entityIdentifier) { this.entityIdentifier = entityIdentifier; } }

測(cè)試時(shí)間

我們將為給定產(chǎn)品創(chuàng)建一個(gè)EntityEvent和一個(gè)EntityAttribute,以查看Embeddable如何與擁有的實(shí)體一起持久保存:

@Test public void testEntityIdentifier() {doInTransaction(new TransactionCallable<Void>() {@Overridepublic Void execute(Session session) {Product product = new Product("LCD");session.persist(product);EntityEvent productEvent = new EntityEvent();productEvent.setMessage(String.format("Product %s added", product.getName()));productEvent.setEntityIdentifier(new EntityIdentifier(product.getClass(),product.getId()));session.persist(productEvent);EntityAttribute productAttribute = new EntityAttribute();productAttribute.setName("AD_CAMPAIGN");productAttribute.setValue("LCD_Sales");productAttribute.setEntityIdentifier(new EntityIdentifier(product.getClass(),product.getId()));session.persist(productAttribute);assertSame(1, session.createQuery("select ea from EntityAttribute ea where ea.entityIdentifier = :entityIdentifier").setParameter("entityIdentifier", new EntityIdentifier(product.getClass(), product.getId())).list().size());return null;}}); }Query:{[ INSERT INTO product(id,name) VALUES (DEFAULT,?) ][LCD]} Query:{[ INSERT INTO entity_event(id,entity_class,entity_id,message) VALUES (DEFAULT,?,?,?) ][com.vladmihalcea.hibernate.masterclass.laboratory.entityidentifier.Product,1,Product LCD added]} Query:{[ INSERT INTO entity_attribute(id,entity_class,entity_id,name,VALUE) VALUES (DEFAULT,?,?,?,?) ][com.vladmihalcea.hibernate.masterclass.laboratory.entityidentifier.Product,1,AD_CAMPAIGN,LCD_Sales]} Query:{[ SELECT entityattr0_.id AS id1_0_,entityattr0_.entity_class AS entity_c2_0_,entityattr0_.entity_id AS entity_i3_0_,entityattr0_.name AS name4_0_,entityattr0_.VALUE AS value5_0_ FROM entity_attribute entityattr0_ WHERE entityattr0_.entity_class = ?AND entityattr0_.entity_id = ? ][com.vladmihalcea.hibernate.masterclass.laboratory.entityidentifier.Product,1]}

結(jié)論

在了解實(shí)體關(guān)聯(lián)之前,我們?nèi)匀恍枰w許多概念。 在跳到更高級(jí)的主題之前,您應(yīng)該始終花一些時(shí)間來(lái)理解基本概念。 我的下一篇文章將介紹實(shí)體標(biāo)識(shí)符和所有可用的生成器技術(shù)。

  • 代碼可在GitHub上獲得 。

翻譯自: https://www.javacodegeeks.com/2014/06/a-beginners-guide-to-hibernate-types.html

hibernate數(shù)據(jù)類型

總結(jié)

以上是生活随笔為你收集整理的hibernate数据类型_Hibernate类型初学者指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。