Hibernate实体映射配置1(java@注解方式)
實(shí)體和數(shù)據(jù)庫之間存在某種映射關(guān)系,hibernate根據(jù)這種映射關(guān)系完成數(shù)據(jù)的存取。在程序中這種映射關(guān)系由映射文件(*.hbm.xml)或者java注解(@)定義。
本文以java注解的形式總結(jié)映射關(guān)系配置。
實(shí)體類組件以及注解標(biāo)簽映射關(guān)系
實(shí)體類-----------@Entity/@Table----------數(shù)據(jù)表
Id--------------@Id----------主鍵
普通屬性---------@Column----------普通鍵
集合屬性---------@OneToMany/@ManyToOne/@ManyToMany/@OneToOne/@OneToMany----------外鍵
將映射文件配置到hibernate配置文件
Hibernate將通過配置文件(cfg.xml)定義實(shí)體和數(shù)據(jù)庫關(guān)系映射
<mapping?class="com.test.Cat"/>
主鍵映射
.Hibernate推薦實(shí)體類有主鍵列并且有setter?和?getter,且主鍵數(shù)據(jù)類型使用引用類型。因?yàn)?#xff0c;基礎(chǔ)數(shù)據(jù)類型不能為null值,hibernate中主鍵的null表明實(shí)體類是處在瞬時(shí)(Transient)狀態(tài),非null表示處持久化()狀態(tài)。
.用@Id聲明為主鍵列,用@Column聲明列名。
.列名屬性名相同時(shí)候@Column可以省略。
.@GeneratedValue指定主鍵的生成策略
Example:
????@Id
? ? @Column(name?=?"id")
????@GeneratedValue(strategy?=?GenerationType.AUTO)
? ? private?Integer?id;
主鍵生成規(guī)則
目前@注解支持4種生成策略:
GenerationType.AUTO:根據(jù)數(shù)據(jù)庫自己決定
GenerationType.TABLE:使用指定表決定主鍵的取值
GenerationType.SEQUENCE:使用sequence決定主鍵取值,適合支持sequence的數(shù)據(jù)庫。
GenerationType.IDENTITY:identity類型的主鍵
普通屬性配置
.java@注解使用@Column和@Basic配置普通屬性。兩者都可以省略
.@Column屬性(聲明字段約束)
?Nullable非空約束
Unique???唯一約束
?Insertable?插入約束(是否允許插入)
?Updateable?更新約束(是否允許更新)
?Length????列長度
?ColumnDefinition?列類型
Scale?????整數(shù)長度
?Precision?小數(shù)點(diǎn)精度
@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的子類。實(shí)體類中聲明成java.util.Date就行了。Hibernate根據(jù)日期配置的具體類型操作數(shù)據(jù)庫。
Example:
????@Temporal(TemporalType.TIMESTAMP)
????//?日期類型(DATE,?TIME還是TIMESTEMP)
? ? @Column(name?=?"createDate")
? ? private?Date?createDate;
臨時(shí)屬性映射
臨時(shí)屬性是實(shí)體類中方便運(yùn)算的成員,不參與數(shù)據(jù)庫的映射。防止hibernate把它和數(shù)據(jù)庫進(jìn)行映射導(dǎo)致產(chǎn)生異常,使用@Transient標(biāo)記。
可以配置在屬性上也可以配置在對(duì)應(yīng)的getter/setter方法上。
Example:
? ? @Transient
? ? Public?setterTemp?(String?temp){
this.temp?=?temp;
? ? }
版本屬性映射
為了保證數(shù)據(jù)的準(zhǔn)確性,程序必須保證只用一個(gè)線程同時(shí)訪問數(shù)據(jù)。樂觀鎖和悲觀鎖是兩種實(shí)現(xiàn)的方式。@Version是樂觀鎖的實(shí)現(xiàn)。版本列一般為數(shù)字列。
Example:
? ? @Version
? ? Private?int?id;
實(shí)體關(guān)系映射配置
見《Hibernate實(shí)體映射配置2(java@注解方式)》
總結(jié)
以上是生活随笔為你收集整理的Hibernate实体映射配置1(java@注解方式)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python】精选30张炫酷的动态交互
- 下一篇: 如何实现多路海康大华等RTSP数据转RT