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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Hibernate注解(二)之映射简单的属性

發布時間:2023/12/3 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate注解(二)之映射简单的属性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

翻譯自? ?Hibernate Annotations

2.??映射簡單的屬性

2.1.聲明基本的屬性映射

????????每個非靜態非瞬態屬性(取決于訪問類型的字段或方法)都被認為是持久性的,除非您將其注釋為@Transient。沒有為您的財產注釋等同于適當的 @Basic注釋。該@Basic 注釋允許您聲明屬性的獲取策略:

public transient int counter; //transient propertyprivate String firstname; //persistent property@Transient String getLengthInMeter() { ... } //transient propertyString getName() {... } // persistent property@Basic int getLength() { ... } // persistent property@Basic(fetch = FetchType.LAZY) String getDetailedComment() { ... } // persistent property@Temporal(TemporalType.TIME) java.util.Date getDepartureTime() { ... } // persistent property @Enumerated(EnumType.STRING) Starred getNote() { ... } //enum persisted as String in database

????????counter,一個瞬時字段,以及 lengthInMeter注釋為@Transient實體管理器并且將被實體管理器忽略的方法 。name,length和 firstname屬性被映射為持久且急切地獲取(簡單屬性的默認值)。在 detailedComment一次實體的懶屬性是第一次訪問屬性值將延遲訪從數據庫中。通常你不需要懶惰的簡單屬性(不要與懶惰的關聯抓取相混淆)。

注意:

????????為了啟用屬性級別的延遲獲取,必須對類進行檢測:將字節碼添加到原始類中以啟用此類功能,請參閱Hibernate參考文檔。如果你的類沒有插裝,屬性級別的延遲加載會被忽略。

????????推薦的替代方法是使用JP-QL(Java持久性查詢語言)或Criteria查詢的投影功能。
????????JPA支持Hibernate支持的所有基本類型(所有基本Java類型,它們各自的包裝器和可序列化類)的屬性映射。Hibernate Annotations支持開箱枚舉類型映射到有序列(保存枚舉序列)或基于字符串的列(保存枚舉字符串表示形式):默認為序號的????????持久性表示可以通過@Enumerated 注釋覆蓋,如圖所示在note屬性的例子。
????????在普通的Java API中,時間的時間精度沒有被定義。在處理時態數據時,您可能想要描述數據庫中的預期精度。時間數據可以具有 DATE,TIME或 TIMESTAMP精確(即實際日期,只有時間或兩者)。使用@Temporal注釋來微調。
????????@Lob表示該屬性應該以斑點或者根據屬性類型的Clob被保留: java.sql.Clob, Character[],char[]和的java.lang。String將堅持在Clob。 java.sql.Blob,Byte[], byte[] 和序列化的類型將被在一個斑點持續存在。

@ Lob public String getFullText (){ return fullText ; } @ Lob public byte [] getFullCode (){ return fullCode ; } ????如果屬性類型實現 java.io.Serializable并且不是基本類型,并且該屬性未被注釋@Lob,則使用Hibernate serializable類型。


2.2.訪問類型

???????默認情況下,類層次結構的訪問類型由@Id或 @EmbeddedId注釋的位置定義。如果這些注釋位于一個字段上,那么只有字段被認為是持久性的,并且狀態通過該字段被訪問。如果注釋位于getter上,那么只有getter被認為是持久性的,并且通過getter / setter來訪問狀態。這在實踐中效果很好,并且是推薦的方法。
注意

????????注解在類層次結構中的放置必須一致(字段或屬性)才能確定默認訪問類型。建議在整個應用程序中堅持使用單個注釋放置策略。


但是在某些情況下,您需要:

  • 強制實體層次結構的訪問類型
  • 覆蓋類層次結構中特定實體的訪問類型
  • 覆蓋可嵌入類型的訪問類型
最好的用例是可能不使用相同訪問類型的幾個實體使用的可嵌入類。在這種情況下,最好在可嵌入類級別強制訪問類型。
要強制給定類的訪問類型,請使用@Access如下所示的 注釋:
@Entity public class Order {@Id private Long id;public Long getId() { return id; }public void setId(Long id) { this.id = id; }@Embedded private Address address;public Address getAddress() { return address; }public void setAddress() { this.address = address; } }@Entity public class User {private Long id;@Id public Long getId() { return id; }public void setId(Long id) { this.id = id; }private Address address;@Embedded public Address getAddress() { return address; }public void setAddress() { this.address = address; } }@Embeddable @Access(AcessType.PROPERTY) public class Address {private String street1;public String getStreet1() { return street1; }public void setStreet1() { this.street1 = street1; }private hashCode; //not persistent }

您還可以覆蓋單個屬性的訪問類型,同時保持其他屬性的標準。

@Entity public class Order {@Id private Long id;public Long getId() { return id; }public void setId(Long id) { this.id = id; }@Transient private String userId;@Transient private String orderId;@Access(AccessType.PROPERTY)public String getOrderNumber() { return userId + ":" + orderId; }public void setOrderNumber() { this.userId = ...; this.orderId = ...; } }

在此示例中,默認訪問類型 FIELD除 orderNumber屬性外。請注意,相應的字段(如果有)必須標記為@Transient或 transient。

@ org.hibernate.annotations.AccessType
@org.hibernate.annotations.AccessType對于FIELD和PROPERTY訪問,該注釋 應被視為棄用。但是,如果您需要使用自定義訪問類型,它仍然很有用。


2.3.? 聲明列屬性

可以使用@Column注釋來定義用于屬性映射的列。使用它來覆蓋默認值(有關默認值的更多信息,請參閱EJB3規范)。您可以在屬性級別對此屬性使用此注釋:

  • 根本沒有注釋
  • 注釋 @Basic
  • 注釋 @Version
  • 注釋 @Lob
  • 注釋 @Temporal
@Entity public class Flight implements Serializable { ... @Column(updatable = false, name = "flight_name", nullable = false, length=50) public String getName() { ... }該name屬性映射到flight_name不可空的 列,長度為50,不可更新(使屬性不可變)。
該注釋可以應用于常規的性質以及 @Id或@Version 性質。
@Column(name="colu(1)mnName";boolean un(2)ique() default false;boolean nu(3)llable() default true;boolean in(4)sertable() default true;boolean up(5)datable() default true;String col(6)umnDefinition() default "";String tab(7)le() default "";int length(8)() default 255;int precis(9)ion() default 0; // decimal precisionint scale((10)) default 0; // decimal scale

name (可選):列名稱(默認為屬性名稱)
unique (可選):是否在此列上設置唯一約束(默認為false)
nullable (可選):將列設置為可空(默認為true)。
insertable (可選):列是否將成為插入語句的一部分(默認為true)
updatable (可選):列是否將成為更新語句的一部分(默認為true)
columnDefinition (可選):覆蓋此特定列的sql DDL片段(非便攜式)
table (可選):定義目標表(默認主表)
length (可選):列長度(默認值為255)
precision (可選):列小數精度(默認值為0)
scale (可選):十進制小數點(如果有用的話)(默認值為0)


2.4.? 嵌入式對象(又名組件)

????可以在實體內部聲明一個嵌入式組件,甚至可以覆蓋它的列映射。組件類必須用注解在類級別進行@Embeddable 注釋。可以使用 相關屬性中的@Embedded和@AttributeOverride注釋來覆蓋特定實體的嵌入對象的列映射 :

@Entity public class Person implements Serializable {// Persistent component using defaultsAddress homeAddress;@Embedded@AttributeOverrides( {@AttributeOverride(name="iso2", column = @Column(name="bornIso2") ),@AttributeOverride(name="name", column = @Column(name="bornCountryName") )} )Country bornIn;... } @Embeddable public class Address implements Serializable {String city;Country nationality; //no overriding here } @Embeddable public class Country implements Serializable {private String iso2;@Column(name="countryName") private String name;public String getIso2() { return iso2; }public void setIso2(String iso2) { this.iso2 = iso2; }public String getName() { return name; }public void setName(String name) { this.name = name; }... } ????????可嵌入對象繼承其擁有實體的訪問類型(請注意,您可以使用@Access注釋覆蓋該類型 )。
???????該Person實體具有兩個組件屬性,homeAddress并且 bornIn。homeAddress屬性沒有被注解,但Hibernate會通過@Embeddable在Address類中查找注釋來猜測它是一個持久組件。我們還覆蓋列名的映射(以bornCountryName與所述) @Embedded和@AttributeOverride 注解的每個映射屬性 Country。正如你所看到的,Country 它也是一個嵌套的組件Address,同樣使用Hibernate和JPA默認的自動檢測。覆蓋嵌入對象嵌入對象的列是通過虛線表達式。
@Embedded@AttributeOverrides( {@AttributeOverride(name="city", column = @Column(name="fld_city") ),@AttributeOverride(name="nationality.iso2", column = @Column(name="nat_Iso2") ),@AttributeOverride(name="nationality.name", column = @Column(name="nat_CountryName") )//nationality columns in homeAddress are overridden} )Address homeAddress;????????Hibernate Annotations支持JPA規范沒有明確支持的東西。您可以使用注釋對嵌入對象進行@MappedSuperclass注釋,以使超類屬性保持不變(請參閱 @MappedSuperclass以獲取更多信息)。
????????您還可以使用關聯標注在嵌入對象(即@OneToOne,@ManyToOne, @OneToMany或@ManyToMany)。覆蓋您可以使用的關聯列 @AssociationOverride。
????????如果您希望在同一實體中具有相同的可嵌入對象類型兩次,則列名默認將不起作用,因為多個嵌入對象將共享同一組列。在普通的JPA中,您需要覆蓋至少一組列。然而,Hibernate允許你通過NamingStrategy界面增強默認的命名機制 。你可以寫一個策略來防止名稱在這種情況下發生沖突。 DefaultComponentSafeNamingStrategy就是這樣一個例子。


2.5.未注釋的屬性默認值

如果一個財產沒有注釋,則適用下列規則:

  • 如果該屬性屬于單一類型,則將其映射為@Basic
  • 否則,如果該屬性的類型被注釋為@Embeddable,則它被映射為@Embedded
  • 否則,如果該屬性的類型是 Serializable,則將其映射為 @Basic保存該序列化版本中的對象的列
  • 否則,如果該屬性的類型是 java.sql.Clob或 java.sql.Blob,則將其映射為 @Lob適當的 LobType



總結

以上是生活随笔為你收集整理的Hibernate注解(二)之映射简单的属性的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 又爽又黄视频 | 91丨九色丨丰满 | 日本美女日批视频 | 久久久久中文字幕亚洲精品 | 国产乱淫av | 成人性毛片 | 国产乱了高清露脸对白 | www.男人的天堂.com | 欧美久草| 苍井空浴缸大战猛男120分钟 | 中文天堂网 | a级片免费视频 | 黄色网战入口 | 男同激情视频 | 视频一区二区在线观看 | 一本久道视频一本久道 | 网站免费视频www | 欧洲女性下面有没有毛发 | 国产真人无遮挡作爱免费视频 | 日本一区二区三区久久 | www亚洲视频 | 国产亚洲毛片 | 成人免费视频国产 | 国产精品资源在线观看 | 两女双腿交缠激烈磨豆腐 | 日本熟女一区二区 | 六月激情网 | 亚洲第一免费播放区 | 自拍偷拍亚洲欧美 | av免费大片| 国产精品自拍视频一区 | 娇喘顶撞深初h1v1 | 亚洲AV无码久久精品色三人行 | 日韩亚洲欧美一区 | 一本毛片 | 亚洲免费婷婷 | 99久久久无码国产精品性 | 男ji大巴进入女人视频 | 国产精品热 | 欧美激情videos | 日本3p视频 | 日韩视频一区二区三区在线播放免费观看 | 国语av | 69久久久久 | 亚洲熟妇丰满大屁股熟妇 | 久久国产传媒 | 日韩精品无码一区二区三区 | 不用播放器av | 蜜桃久久av一区 | 床戏高潮呻吟声片段 | 少女视频的播放方法 | 欧美日韩精品一区二区在线观看 | 香蕉视频三级 | 伊人久久视频 | 亚洲美女毛片 | 深夜福利成人 | 国产精品久久久久久婷婷天堂 | 国产视频xxx | 丰满熟女人妻一区二区三区 | 日本h视频在线观看 | 午夜你懂的 | 一区二区精 | 日本黄色高清视频 | 男女又爽又黄 | 香蕉网在线视频 | 国产三级精品三级在线观看 | 五月婷综合 | 久久综合狠狠综合久久综合88 | 超碰c| 狠狠人妻久久久久久综合麻豆 | 国产精品久久久久久免费播放 | 亚洲精品国产成人 | 国产黄色片在线观看 | 久久成人久久爱 | 日韩一级欧美 | 向着小小的花蕾绽放 | 国产又黄视频 | 加勒比一区在线 | 天干夜夜爽爽日日日日 | 欧美日韩一区二区三区在线 | av先锋资源网 | 男人日女人网站 | 国产精品视频专区 | 99riav1国产精品视频 | 91视频在线观看网站 | 性欧美视频 | 久久综合热 | 亚洲图片在线播放 | av免播放器| 久久国产色av | 一区二区小视频 | 热久久网站 | 国产喷白浆一区二区三区 | 欧美视频免费在线 | 免费一区二区视频 | 777奇米视频| 激情综合影院 | 久久精品a亚洲国产v高清不卡 | 亚洲av色区一区二区三区 |