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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hibernate之生成的和默认的属性值(使用generated刷新实体) .

發(fā)布時(shí)間:2024/4/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate之生成的和默认的属性值(使用generated刷新实体) . 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?http://blog.csdn.net/fhd001/article/details/5878498

生成的和默認(rèn)的屬性值

?

如果類的一個(gè)特定屬性有著數(shù)據(jù)庫(kù)生成的值,通常在第一次插入實(shí)體行的時(shí)候。典型的數(shù)據(jù)庫(kù)生成的值是創(chuàng)建的時(shí)間戳 , 還有其它默認(rèn)值等. ? ? ?

每當(dāng)hibernate給定義了已生成或默認(rèn)屬性的實(shí)體執(zhí)行SQL INSERT或UPDATE時(shí),它在插入默認(rèn)值或生成值之后立即執(zhí)行SELECT。因?yàn)樵O(shè)置了generated=always,hibernate會(huì)在插入后自動(dòng)的執(zhí)行一個(gè)select,給Java類中的屬性設(shè)置,如果沒有設(shè)置generated屬性,需要顯式調(diào)用session.flush()語(yǔ)句。這里就是說,?數(shù)據(jù)庫(kù)默認(rèn)生成值的字段,必須通過select后把值傳給java實(shí)體的該屬性。

使用property映射中的generated開關(guān)啟用這個(gè)自動(dòng)刷新:

<property name="lastModified" column="LAST_MODIFIED" update="false" insert="false" generated="always"/>

標(biāo)記為數(shù)據(jù)庫(kù)生成的屬性還必須是非可插入和非可更新的,用insert和update屬性進(jìn)行控制它們。如果兩者都設(shè)置為false,屬性的列就永遠(yuǎn)不會(huì)出現(xiàn)在INSERT或者UPDATE語(yǔ)句中---屬性值是只讀的。而且,通常不在類中給不可變的屬性添加公有的設(shè)置方法(這時(shí)應(yīng)切換到字段訪問).

?

關(guān)于generated=""的適用值說明:

never(默認(rèn)):標(biāo)明此屬性值不是從數(shù)據(jù)庫(kù)中生成, 也就是根本不用刷新實(shí)體類了。

insert:標(biāo)明此屬性值在insert的時(shí)候生成,但是不會(huì)在隨后的update時(shí)重新生成。也就是只在insert情況下才會(huì)刷新實(shí)體類。

always:標(biāo)明此屬性值在insert和update時(shí)都會(huì)被生成。也就是在insert,update情況下都會(huì)刷新實(shí)體類。

?

例1:

[java:firstline[1]] view plaincopyprint?
  • package?pojo;??
  • import?java.io.Serializable;??
  • import?java.util.Calendar;??
  • public?class?Student?implements?Serializable{??
  • ????private?String?id;??
  • ????private?String?name;??
  • ????//刪除age的公共設(shè)置方法 ??
  • ????private?int?age;??
  • ????//刪除createTime的公共設(shè)置方法 ??
  • ????private?Calendar?createTime;??
  • ????//刪除updateTime的公共設(shè)置方法 ??
  • ????private?Calendar?updateTime;??
  • ??????
  • ????public?String?getId()?{??
  • ????????return?id;??
  • ????}??
  • ????@SuppressWarnings("unused")??
  • ????private?void?setId(String?id)?{??
  • ????????this.id?=?id;??
  • ????}??
  • ????public?String?getName()?{??
  • ????????return?name;??
  • ????}??
  • ????public?void?setName(String?name)?{??
  • ????????this.name?=?name;??
  • ????}??
  • ????public?int?getAge()?{??
  • ????????return?age;??
  • ????}??
  • ????public?Calendar?getCreateTime()?{??
  • ????????return?createTime;??
  • ????}??
  • ????public?Calendar?getUpdateTime()?{??
  • ????????return?updateTime;??
  • ????}??
  • }??
  • package pojo; import java.io.Serializable; import java.util.Calendar; public class Student implements Serializable{private String id;private String name;//刪除age的公共設(shè)置方法private int age;//刪除createTime的公共設(shè)置方法private Calendar createTime;//刪除updateTime的公共設(shè)置方法private Calendar updateTime;public String getId() {return id;}@SuppressWarnings("unused")private void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public Calendar getCreateTime() {return createTime;}public Calendar getUpdateTime() {return updateTime;} } ?

    [xhtml:firstline[1]] view plaincopyprint?
  • <?xml?version="1.0"?encoding="UTF-8"?>????
  • <!DOCTYPE?hibernate-mapping?PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD//EN"????
  • ????"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">????
  • <hibernate-mapping?package="pojo">????
  • ????<class?name="Student"?table="A_STUDENT">????
  • ????????<id?name="id"?column="ID"?type="string">????
  • ????????????<generator?class="uuid.hex"/>????
  • ????????</id>??
  • ????????<property?name="name"?column="NAME"?type="string"/>??
  • ????????<!--?insert="false",update="false"?:?設(shè)置屬性為只讀,?該字段不會(huì)出現(xiàn)在insert,update中。????????????????????-->??
  • ????????<!--?access?:?設(shè)置直接以字段訪問??????????????????????????????????????????????????????????????????????????-->??
  • ????????<!--?generated="always"?:?在insert或update情況下,hibernate為表字段生成默認(rèn)值之后,會(huì)刷新實(shí)體類,把生成的?-->??
  • ????????<!--?默認(rèn)值返回給實(shí)體類。??????????????????????????????????????????????????????????????????????????????????-->??
  • ????????<property?name="age"?column="AGE"?type="integer"?insert="false"?update="false"???
  • ????????????access="field"?generated="always"/>????
  • ????????<property?name="createTime"?column="CREATETIME"?type="calendar"?insert="false"???
  • ????????????update="false"?access="field"?generated="always"/>????
  • ????????<property?name="updateTime"?column="UPDATETIME"?type="calendar"?insert="false"???
  • ????????????update="false"?access="field"?generated="always"/>?????
  • ????</class>????
  • </hibernate-mapping>??
  • <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="pojo"> <class name="Student" table="A_STUDENT"> <id name="id" column="ID" type="string"> <generator class="uuid.hex"/> </id><property name="name" column="NAME" type="string"/><!-- insert="false",update="false" : 設(shè)置屬性為只讀, 該字段不會(huì)出現(xiàn)在insert,update中。 --><!-- access : 設(shè)置直接以字段訪問 --><!-- generated="always" : 在insert或update情況下,hibernate為表字段生成默認(rèn)值之后,會(huì)刷新實(shí)體類,把生成的 --><!-- 默認(rèn)值返回給實(shí)體類。 --><property name="age" column="AGE" type="integer" insert="false" update="false" access="field" generated="always"/> <property name="createTime" column="CREATETIME" type="calendar" insert="false" update="false" access="field" generated="always"/> <property name="updateTime" column="UPDATETIME" type="calendar" insert="false" update="false" access="field" generated="always"/> </class> </hibernate-mapping>

    ?

    例2:

    [java:firstline[1]] view plaincopyprint?
  • package?pojo;??
  • import?java.io.Serializable;??
  • import?java.util.Calendar;??
  • public?class?Student?implements?Serializable{??
  • ????private?String?id;??
  • ????private?String?name;??
  • ????//刪除age的公共設(shè)置方法 ??
  • ????private?int?age;??
  • ????//刪除createTime的公共設(shè)置方法 ??
  • ????private?Calendar?createTime;??
  • ????//刪除updateTime的公共設(shè)置方法 ??
  • ????private?Calendar?updateTime;??
  • ??????
  • ????public?String?getId()?{??
  • ????????return?id;??
  • ????}??
  • ????@SuppressWarnings("unused")??
  • ????private?void?setId(String?id)?{??
  • ????????this.id?=?id;??
  • ????}??
  • ????public?String?getName()?{??
  • ????????return?name;??
  • ????}??
  • ????public?void?setName(String?name)?{??
  • ????????this.name?=?name;??
  • ????}??
  • ????public?int?getAge()?{??
  • ????????return?age;??
  • ????}??
  • ????public?Calendar?getCreateTime()?{??
  • ????????return?createTime;??
  • ????}??
  • ????public?Calendar?getUpdateTime()?{??
  • ????????return?updateTime;??
  • ????}??
  • }??
  • package pojo; import java.io.Serializable; import java.util.Calendar; public class Student implements Serializable{private String id;private String name;//刪除age的公共設(shè)置方法private int age;//刪除createTime的公共設(shè)置方法private Calendar createTime;//刪除updateTime的公共設(shè)置方法private Calendar updateTime;public String getId() {return id;}@SuppressWarnings("unused")private void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public Calendar getCreateTime() {return createTime;}public Calendar getUpdateTime() {return updateTime;} }

    [xhtml:firstline[1]] view plaincopyprint?
  • <?xml?version="1.0"?encoding="UTF-8"?>????
  • <!DOCTYPE?hibernate-mapping?PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD//EN"????
  • ????"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">????
  • <hibernate-mapping?package="pojo">????
  • ????<class?name="Student"?table="A_STUDENT"?dynamic-insert="true"?dynamic-update="true">????
  • ????????<id?name="id"?column="ID"?type="string">????
  • ????????????<generator?class="uuid.hex"/>????
  • ????????</id>??
  • ????????<property?name="name"?column="NAME"?type="string"/>??
  • ????????<!--?有了dynamic-insert="true",dynamic-update="true"就不需要update="false"?insert="false"了?????-->?????????????????????????????????????
  • ????????<!--?access?:?設(shè)置直接以字段訪問??????????????????????????????????????????????????????????????????-->??
  • ????????<!--?generated="always"?:?在insert或update情況下,hibernate為表字段????????????????????????????????-->??
  • ????????<!--?生成默認(rèn)值之后,會(huì)刷新實(shí)體類,把生成的默認(rèn)值返回給實(shí)體類。???????????????????????????????????????-->??
  • ????????<property?name="age"?????????column="AGE"????????type="integer"??access="field"?generated="always"/>????
  • ????????<property?name="createTime"?column="CREATETIME"?type="calendar"?access="field"?generated="always"/>????
  • ????????<property?name="updateTime"?column="UPDATETIME"?type="calendar"?access="field"?generated="always"/>?????
  • ????</class>????
  • </hibernate-mapping>??
  • <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="pojo"> <class name="Student" table="A_STUDENT" dynamic-insert="true" dynamic-update="true"> <id name="id" column="ID" type="string"> <generator class="uuid.hex"/> </id><property name="name" column="NAME" type="string"/><!-- 有了dynamic-insert="true",dynamic-update="true"就不需要update="false" insert="false"了 --> <!-- access : 設(shè)置直接以字段訪問 --><!-- generated="always" : 在insert或update情況下,hibernate為表字段 --><!-- 生成默認(rèn)值之后,會(huì)刷新實(shí)體類,把生成的默認(rèn)值返回給實(shí)體類。 --><property name="age" column="AGE" type="integer" access="field" generated="always"/> <property name="createTime" column="CREATETIME" type="calendar" access="field" generated="always"/> <property name="updateTime" column="UPDATETIME" type="calendar" access="field" generated="always"/> </class> </hibernate-mapping>

    因?yàn)橛辛薲ynamic-insert="true" dynamic-update="true", 那么沒有設(shè)值的屬性(age,createTime,updateTime)就不會(huì)出現(xiàn)在insert,update的數(shù)據(jù)庫(kù)執(zhí)行語(yǔ)句中,所以也就沒有必要在各屬性上使用insert="false" update="false"。

    ?

    例3,比較generated="always",generated="insert":

    [java:firstline[1]] view plaincopyprint?
  • package?pojo;??
  • import?java.io.Serializable;??
  • import?java.util.Calendar;??
  • public?class?Student?implements?Serializable{??
  • ????private?String?id;??
  • ????private?String?name;??
  • ????//刪除age的公共設(shè)置方法 ??
  • ????private?int?age;??
  • ????//刪除createTime的公共設(shè)置方法 ??
  • ????private?Calendar?createTime;??
  • ????//刪除updateTime的公共設(shè)置方法 ??
  • ????private?Calendar?updateTime;??
  • ??????
  • ????public?String?getId()?{??
  • ????????return?id;??
  • ????}??
  • ????@SuppressWarnings("unused")??
  • ????private?void?setId(String?id)?{??
  • ????????this.id?=?id;??
  • ????}??
  • ????public?String?getName()?{??
  • ????????return?name;??
  • ????}??
  • ????public?void?setName(String?name)?{??
  • ????????this.name?=?name;??
  • ????}??
  • ????public?int?getAge()?{??
  • ????????return?age;??
  • ????}??
  • ????public?Calendar?getCreateTime()?{??
  • ????????return?createTime;??
  • ????}??
  • ????public?Calendar?getUpdateTime()?{??
  • ????????return?updateTime;??
  • ????}??
  • }??
  • package pojo; import java.io.Serializable; import java.util.Calendar; public class Student implements Serializable{private String id;private String name;//刪除age的公共設(shè)置方法private int age;//刪除createTime的公共設(shè)置方法private Calendar createTime;//刪除updateTime的公共設(shè)置方法private Calendar updateTime;public String getId() {return id;}@SuppressWarnings("unused")private void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public Calendar getCreateTime() {return createTime;}public Calendar getUpdateTime() {return updateTime;} } ?

    [xhtml:firstline[1]] view plaincopyprint?
  • <?xml?version="1.0"?encoding="UTF-8"?>????
  • <!DOCTYPE?hibernate-mapping?PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD//EN"????
  • ????"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">????
  • <hibernate-mapping?package="pojo">????
  • ????<class?name="Student"?table="A_STUDENT"?dynamic-insert="true"?dynamic-update="true">????
  • ????????<id?name="id"?column="ID"?type="string">????
  • ????????????<generator?class="uuid.hex"/>????
  • ????????</id>??
  • ????????<property?name="name"?column="NAME"?type="string"/>??
  • ????????<!--?有了dynamic-insert="true",dynamic-update="true"就不需要update="false"?insert="false"了?????-->?????????????????????????????????????
  • ????????<!--?access?:?設(shè)置直接以字段訪問??????????????????????????????????????????????????????????????????-->??
  • ????????<!--?generated="always"?:?在insert或update情況下,hibernate為表字段????????????????????????????????-->??
  • ????????<!--?生成默認(rèn)值之后,會(huì)刷新實(shí)體類,把生成的默認(rèn)值返回給實(shí)體類。???????????????????????????????????????-->??
  • ????????<!--?注意,age上generated="insert"???????????????????????????????????????????????????????????????-->??
  • ????????<property?name="age"?????????column="AGE"????????type="integer"??access="field"?generated="insert"/>????
  • ????????<property?name="createTime"?column="CREATETIME"?type="calendar"?access="field"?generated="always"/>????
  • ????????<property?name="updateTime"?column="UPDATETIME"?type="calendar"?access="field"?generated="always"/>?????
  • ????</class>????
  • </hibernate-mapping>??
  • <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="pojo"> <class name="Student" table="A_STUDENT" dynamic-insert="true" dynamic-update="true"> <id name="id" column="ID" type="string"> <generator class="uuid.hex"/> </id><property name="name" column="NAME" type="string"/><!-- 有了dynamic-insert="true",dynamic-update="true"就不需要update="false" insert="false"了 --> <!-- access : 設(shè)置直接以字段訪問 --><!-- generated="always" : 在insert或update情況下,hibernate為表字段 --><!-- 生成默認(rèn)值之后,會(huì)刷新實(shí)體類,把生成的默認(rèn)值返回給實(shí)體類。 --><!-- 注意,age上generated="insert" --><property name="age" column="AGE" type="integer" access="field" generated="insert"/> <property name="createTime" column="CREATETIME" type="calendar" access="field" generated="always"/> <property name="updateTime" column="UPDATETIME" type="calendar" access="field" generated="always"/> </class> </hibernate-mapping>?

    [java:firstline[1]] view plaincopyprint?
  • package?util;??
  • import?org.hibernate.Session;??
  • import?org.hibernate.Transaction;??
  • import?pojo.Student;??
  • public?class?Manager?{??
  • ????public?static?void?main(String[]?args)?{??
  • ??????????
  • ????????Student?stu?=?new?Student();??
  • ????????stu.setName("fuhaidong");??
  • ??????????
  • ????????Session?session?=?HibernateUtil.getSessionFactory().openSession();??
  • ????????Transaction?transaction?=?session.beginTransaction();??
  • ??????????
  • ????????session.save(stu);??
  • ????????Student?s?=?(Student)?session.get(Student.class,?"402881832b3dea91012b3dea925a0001");??
  • ????????s.setName("dddd");??
  • ????????transaction.commit();??
  • ????????session.close();??
  • ??????????
  • ????}??
  • }??
  • package util; import org.hibernate.Session; import org.hibernate.Transaction; import pojo.Student; public class Manager {public static void main(String[] args) {Student stu = new Student();stu.setName("fuhaidong");Session session = HibernateUtil.getSessionFactory().openSession();Transaction transaction = session.beginTransaction();session.save(stu);Student s = (Student) session.get(Student.class, "402881832b3dea91012b3dea925a0001");s.setName("dddd");transaction.commit();session.close();} } ?

    ?

    輸出日志:

    [java:firstline[1]] view plaincopyprint?
  • Hibernate:???
  • ????select??
  • ????????student0_.ID?as?ID0_0_,??
  • ????????student0_.NAME?as?NAME0_0_,??
  • ????????student0_.AGE?as?AGE0_0_,??
  • ????????student0_.CREATETIME?as?CREATETIME0_0_,??
  • ????????student0_.UPDATETIME?as?UPDATETIME0_0_???
  • ????from??
  • ????????A_STUDENT?student0_???
  • ????where??
  • ????????student0_.ID=???
  • Hibernate:???
  • ????insert???
  • ????into??
  • ????????A_STUDENT??
  • ????????(NAME,?ID)???
  • ????values??
  • ????????(?,??)??
  • Hibernate:???
  • ????select??
  • ????????student_.AGE?as?AGE0_,??
  • ????????student_.CREATETIME?as?CREATETIME0_,??
  • ????????student_.UPDATETIME?as?UPDATETIME0_???
  • ????from??
  • ????????A_STUDENT?student_???
  • ????where??
  • ????????student_.ID=???
  • ------------上面插入數(shù)據(jù)后,三個(gè)列都被查詢用來刷新實(shí)體了。??
  • Hibernate:???
  • ????update??
  • ????????A_STUDENT???
  • ????set??
  • ????????NAME=????
  • ????where??
  • ????????ID=???
  • Hibernate:???
  • ????select??
  • ????????student_.CREATETIME?as?CREATETIME0_,??
  • ????????student_.UPDATETIME?as?UPDATETIME0_???
  • ????from??
  • ????????A_STUDENT?student_???
  • ????where??
  • ????????student_.ID=???
  • ------------更新數(shù)據(jù)后,只有聲明為generated="always"的列被查詢??
  • Hibernate: selectstudent0_.ID as ID0_0_,student0_.NAME as NAME0_0_,student0_.AGE as AGE0_0_,student0_.CREATETIME as CREATETIME0_0_,student0_.UPDATETIME as UPDATETIME0_0_ fromA_STUDENT student0_ wherestudent0_.ID=? Hibernate: insert intoA_STUDENT(NAME, ID) values(?, ?) Hibernate: selectstudent_.AGE as AGE0_,student_.CREATETIME as CREATETIME0_,student_.UPDATETIME as UPDATETIME0_ fromA_STUDENT student_ wherestudent_.ID=? ------------上面插入數(shù)據(jù)后,三個(gè)列都被查詢用來刷新實(shí)體了。 Hibernate: updateA_STUDENT setNAME=? whereID=? Hibernate: selectstudent_.CREATETIME as CREATETIME0_,student_.UPDATETIME as UPDATETIME0_ fromA_STUDENT student_ wherestudent_.ID=? ------------更新數(shù)據(jù)后,只有聲明為generated="always"的列被查詢?


    ?

    最后要注意的是,數(shù)據(jù)庫(kù)表的age,createTime,updateTime字段上都要有默認(rèn)值,或者有觸發(fā)器 ,不然上面所有例子的age,createTime,

    updateTime在表中的值都是null.

    ?

    總結(jié)

    以上是生活随笔為你收集整理的hibernate之生成的和默认的属性值(使用generated刷新实体) .的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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