Hibernate实体映射配置1(java@注解方式)
實體和數據庫之間存在某種映射關系,hibernate根據這種映射關系完成數據的存取。在程序中這種映射關系由映射文件(*.hbm.xml)或者java注解(@)定義。
本文以java注解的形式總結映射關系配置。
實體類組件以及注解標簽映射關系
實體類-----------@Entity/@Table----------數據表
Id--------------@Id----------主鍵
普通屬性---------@Column----------普通鍵
集合屬性---------@OneToMany/@ManyToOne/@ManyToMany/@OneToOne/@OneToMany----------外鍵
將映射文件配置到hibernate配置文件
Hibernate將通過配置文件(cfg.xml)定義實體和數據庫關系映射
<mapping?class="com.test.Cat"/>
主鍵映射
.Hibernate推薦實體類有主鍵列并且有setter?和?getter,且主鍵數據類型使用引用類型。因為,基礎數據類型不能為null值,hibernate中主鍵的null表明實體類是處在瞬時(Transient)狀態,非null表示處持久化()狀態。
.用@Id聲明為主鍵列,用@Column聲明列名。
.列名屬性名相同時候@Column可以省略。
.@GeneratedValue指定主鍵的生成策略
Example:
????@Id
? ? @Column(name?=?"id")
????@GeneratedValue(strategy?=?GenerationType.AUTO)
? ? private?Integer?id;
主鍵生成規則
目前@注解支持4種生成策略:
GenerationType.AUTO:根據數據庫自己決定
GenerationType.TABLE:使用指定表決定主鍵的取值
GenerationType.SEQUENCE:使用sequence決定主鍵取值,適合支持sequence的數據庫。
GenerationType.IDENTITY:identity類型的主鍵
普通屬性配置
.java@注解使用@Column和@Basic配置普通屬性。兩者都可以省略
.@Column屬性(聲明字段約束)
?Nullable非空約束
Unique???唯一約束
?Insertable?插入約束(是否允許插入)
?Updateable?更新約束(是否允許更新)
?Length????列長度
?ColumnDefinition?列類型
Scale?????整數長度
?Precision?小數點精度
@Basic屬性(聲明加載方式)
?Fetch?是否延遲加載
?Optional?該列是否可以為null
Example:
? ? ?@Column(name?=?"salary",?scale?=?8,?precision?=?2)
? ? ?@Basic(fetch?=?FetchType.LAZY,?optional=true)
? ? ?private?double?salary;
日期屬性配置
日期屬性也是普通屬性
除了@column和@Basic之外還可得使用@Temporal配置日期類型
java.sql.Date/java.sql.Time/java.sql.Timestamp都是java.util.Date的子類。實體類中聲明成java.util.Date就行了。Hibernate根據日期配置的具體類型操作數據庫。
Example:
????@Temporal(TemporalType.TIMESTAMP)
????//?日期類型(DATE,?TIME還是TIMESTEMP)
? ? @Column(name?=?"createDate")
? ? private?Date?createDate;
臨時屬性映射
臨時屬性是實體類中方便運算的成員,不參與數據庫的映射。防止hibernate把它和數據庫進行映射導致產生異常,使用@Transient標記。
可以配置在屬性上也可以配置在對應的getter/setter方法上。
Example:
? ? @Transient
? ? Public?setterTemp?(String?temp){
this.temp?=?temp;
? ? }
版本屬性映射
為了保證數據的準確性,程序必須保證只用一個線程同時訪問數據。樂觀鎖和悲觀鎖是兩種實現的方式。@Version是樂觀鎖的實現。版本列一般為數字列。
Example:
? ? @Version
? ? Private?int?id;
實體關系映射配置
見《Hibernate實體映射配置2(java@注解方式)》
總結
以上是生活随笔為你收集整理的Hibernate实体映射配置1(java@注解方式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python】精选30张炫酷的动态交互
- 下一篇: 【Python】Jupyter Note