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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/3 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate数据类型_Hibernate类型初学者指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

hibernate數據類型

基本映射概念

學習Hibernate時,許多人喜歡跳到父子關聯,而無需掌握對象關系映射的基礎知識。 在開始對實體關聯進行建模之前,了解各個實體的基本映射規則非常重要。

Hibernate類型

Hibernate類型是SQL類型和Java原語/對象類型之間的橋梁。


這些是Hibernate默認支持的類型:

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

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

嵌入式(aka組件)類型

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

一個Embeddable對象可能包含基本類型和關聯映射,但永遠不能包含@Id。 可嵌入對象及其擁有的實體將被持久保存/刪除。

假設我們有下面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分組為一個Embeddable對象,該對象將在兩個不同的擁有實體中使用。

Embeddable對象如下所示:

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

關聯的Entity表將繼承Embeddable屬性的關聯列。

實體

實體與SQL表行的Java等效。 該實體必須包含一個@Id屬性,該屬性映射關聯的表主鍵。

應用程序邏輯對實體屬性進行更改,并將實體狀態更改(持久,合并,刪除)通知持久性上下文。 因此,持久性上下文會將所有實體更改轉換為SQL語句。

假設我們有以下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));

由于兩個表都包含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; } }

測試時間

我們將為給定產品創建一個EntityEvent和一個EntityAttribute,以查看Embeddable如何與擁有的實體一起持久保存:

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

結論

在了解實體關聯之前,我們仍然需要涵蓋許多概念。 在跳到更高級的主題之前,您應該始終花一些時間來理解基本概念。 我的下一篇文章將介紹實體標識符和所有可用的生成器技術。

  • 代碼可在GitHub上獲得 。

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

hibernate數據類型

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美狠狠爱| 91亚洲国产成人精品一区 | 91蝌蚪91密月 | 欧美性大战久久久久xxx | 日韩一区二区在线看 | 久久久精品99 | 草草视频在线 | 天天爽夜夜爽一区二区三区 | 亚洲美女视频网 | 欧美亚洲一区二区在线观看 | 91香蕉视频在线 | 国产av无码国产av毛片 | 丁香在线 | 99福利影院 | 国产黄色在线 | 真实偷拍激情啪啪对白 | 一区二区三区日韩电影 | www.狠狠撸.com | 91看片免费看 | 欧美精品亚洲精品日韩精品 | 亚洲一区福利视频 | 国产日韩精品一区二区三区 | 成人在线观看一区二区三区 | 天堂av一区 | 欧美一区二区三区久久成人精品 | 日本精品一区二区三区四区 | 亚洲第一色在线 | 自拍1区 | 国产高潮又爽又无遮挡又免费 | 浮力影院国产第一页 | 天堂av一区二区三区 | 色爽黄 | 激情噜噜 | 99香蕉视频| 伊人久久伊人 | 久久精品一区二区三区黑人印度 | 美女色网站 | 大胸喷奶水www视频妖精网站 | 911香蕉视频 | 青青草国产成人av片免费 | 欧美人妻精品一区二区 | 嫩草在线看| 伊人久久一区 | 欧美精品成人久久 | 少妇资源 | 黄色一级片网站 | 国产精品 欧美 日韩 | 亚洲欧美在线一区二区 | 国产成人福利 | 136fldh导航福利微拍 | 先锋影音久久 | 久久特黄视频 | 亚洲hhh | 激情小说中文字幕 | 亚洲av永久无码精品一区二区国产 | 免费看片网站91 | 中文字幕久久av | 日韩三级视频在线观看 | 亚洲黄页 | 91精品国产综合久久久密臀九色 | 天天综合天天 | 欧美伊人| 日韩精品免费一区二区 | 五月天综合色 | 性色av蜜臀av浪潮av老女人 | 又黄又骚又爽 | 国产成人午夜高潮毛片 | 法国性xxxx精品hd | 亚洲av无码一区二区三区在线观看 | 夜夜躁很很躁日日躁麻豆 | 97国产精品视频 | 中文字幕一区在线 | 日韩三级中文 | 三级av免费 | 日韩人妻一区 | 能免费看黄色的网站 | 青青草网址 | 亚洲欧美日韩一区二区三区在线观看 | 欧美成人图区 | 国产污片在线观看 | 国产对白刺激视频 | 午夜精品久久久久久久99黑人 | 91在线第一页 | 夜夜操狠狠干 | 日本人妻换人妻毛片 | 欧美不卡三区 | 人人舔人人爽 | 成年人午夜网站 | 99草| 午夜在线精品 | 日韩成人一区二区视频 | 一道本久在线中文字幕 | 午夜一级片 | 一区二区三区国产视频 | 久久久久噜噜噜亚洲熟女综合 | 欧美一级大片在线观看 | 日韩在线视频网址 | 成年人国产视频 | 福利一二区 |