尚學堂馬士兵hibernate筆記講義_第1頁
尚學堂馬士兵hibernate筆記講義_第2頁
尚學堂馬士兵hibernate筆記講義_第3頁
尚學堂馬士兵hibernate筆記講義_第4頁
尚學堂馬士兵hibernate筆記講義_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、知識點終結:1 新建項目2 學習建立user-library-hibernate,并加入相應的jar包 a項目右鍵-build path-configure build path-add library b選擇user-library,在其中新建library,命命為hibernate c 在該library中加入hibernate所需要的jar包hibernate3.3.2 /hibernate3.jar/lib/required目錄下的所有包 6個Sl4j-nop jar3 引入mysql的JDBC驅動包4 在MYSQL中建數(shù)據(jù)庫和相應的表student(id,name,age) 參考文檔

2、中COPY,修改對應的數(shù)據(jù)庫連接,6 建立student類7 建立映射文件Student.hbm.xml 參考相應文檔8 將映射文件加到hibernate-cfg.xml中搭建日志環(huán)境并配置顯示DDL語句slf的實現(xiàn):slf4j nodep ,log4j ,jdk logging api ,apache common-log.slf4j.nop.jar是slf-api.jar其相應的接口實現(xiàn)把slf的接口對到log4j的實現(xiàn),在user library中hibernate,把slf的實現(xiàn)slf4j-nop-1.5.8.jar去掉,添加log4j的實現(xiàn)log4j-1.2.15.jar,再添加一個

3、slf-api和log4j轉換器slf4j-log4j12-1.5.8.jar.把slf的接口轉換成log4j的接口.最后添加一個log4j的配置文件perties利用HIBERNATE導出數(shù)據(jù)庫建表Configuration cfg=new AnnotationConfiguration().configure();(有注解時使用AnnotationConfiguration),configure()可以手動指定配置文件名稱.Configuration cfg=new Configuration(),會默認讀取perties文件/創(chuàng)建schemaE

4、xport對象import org.hibernate.tool.hbm2ddl.SchemaExport;SchemaExport export=new SchemaExport(cfg);/創(chuàng)建數(shù)據(jù)庫表export.create(true, true);對象映射(采用Annotation注解方式)1 建表 Create table teacher(id int primary key,name varchar(20),title varchar(20);2 創(chuàng)建teacher類,并進行注解import javax.persistence.Entity;import ;在bean中加注解 E

5、ntity,Id(加在getId()上面)3 在hibernate中加入annotation相應的jar包hibernate-annotations.jar/lib目錄下加入相應的包ejb3-persistence.jar, hibernate-commons-annotations.jar注意:annotation文檔中并沒有提到hibernate-annotations.jar包4 參考annotation文檔建立對應的注解5 在hibernate.cfg.xml中建立映射 6 示例/AnnotationConfiguration;Configuration cfg=new Annotat

6、ionConfiguration();SessionFactory sf=cfg.configure().buildSessionFactory();Session session=sf.openSession();session.beginTransaction();session.save(t);/session.getTransaction().commit();session.close();sf.close();對象映射(采用配置文件方式)1 在相應的類中建立對應的配置文件. 例如Student類對應的配置文件2 在hibernate.cfg.xml中添加該映射文件即可 注意包名的寫

7、法3 示例Configuration cfg=new Configuration().configure();/創(chuàng)建SessionFactorySessionFactory sf=cfg.configure().buildSessionFactory();/創(chuàng)建sessionSession session=sf.openSession();session.beginTransaction();session.save(s);session.getTransaction().commit();session.close();sf.close();hibernate.cfg.xml配置hibern

8、ate.hbm2ddl.auto屬性取值: validate | update | create | create-drop在sessionfactory創(chuàng)建時,自動檢查數(shù)據(jù)結構,或者將數(shù)據(jù)庫schema(表)的DDL導出到數(shù)據(jù)庫,使用create-drop時,在顯式關閉sessionfactory時,將drop掉數(shù)據(jù)庫schema.validate 加載hibernate時,驗證創(chuàng)建數(shù)據(jù)庫表結構 create 每次加載hibernate,重新創(chuàng)建數(shù)據(jù)庫表結構 create-drop 加載hibernate時創(chuàng)建,退出是刪除表結構 update 加載hibernate自動更新數(shù)據(jù)庫結構表名和類

9、名不同的情況時,對表名進行配置1 在注解中import javax.persistence.Table;Table(name=”TableName”)2 在XML文件中 配置對應的table屬性為相應的表名字段名和屬性名相同,默認為對于annotation,如果什么注解都不寫的話,相當于加了注解Basic實體bean中所有的非static非transient的屬性都可以被持久化, 除非你將其注解為Transient.所有沒有定義注解的屬性等價于在其上面添加了Basic注解. 通過 Basic注解可以聲明屬性的獲取策略(fetch strategy):對于XML文件中不用寫column.字段名和

10、屬性名不同時Annotation:column(name=”column_name”)加上相應的getXXX()方法上XML:column屬性不需要persistence的字段import javax.persistence.Transient; Transient 意思是說這個屬性是透明的,不進行持久化,存儲的時候不存進去映射日期和時間類型,指定時間精度Annotation: import javax.persistence.Temporal;Temporal(TemporalType.TIME)XML:指定typetype=time或date枚舉類型的轉換Enumerated(EnumTy

11、pe.STRING)字段映射的位置推薦寫在gexXXX方法上Hibernate映射類型Hibernate 映射類型 Java 類型 標準 SQL 類型 大小和取值范圍 integer 或者 int int 或者 INTEGER 4 字節(jié) long long Long BIGINT 8 字節(jié) short short Short SMALLINT 2 字節(jié) byte byte Byte TINYINT 1 字節(jié) float float Float FLOAT 4 字節(jié) double double Double DOUBLE 8 字節(jié) big_decimal NUMERIC NUMERIC(8,2)

12、8 位 character char Character String CHAR(1) 定長字符 string String VARCHAR 變長字符串 boolean boolean Boolean BIT 布爾類型 yes_no boolean Boolean CHAR(1) (Y-N) 布爾類型 true_false boolean Boolean CHAR(1) (T-F) 布爾類型 2 、 Java 時間和日期類型的 Hibernate 映射 映射類型 Java 類型 標準 SQL 類型 描述 date util.Date 或者 sql.Date DATE YYYY-MM-DD ti

13、me Date Time TIME HH:MM:SS timestamp Date Timestamp TIMESTAMP YYYYMMDDHHMMSS calendar calendar TIMESTAMP YYYYMMDDHHMMSS calendar_date calendar DATE YYYY-MM-DD 3 、 Java 大對象類型的 Hibernate 映射類型 映射類型 Java 類型 標準 SQL 類型 MySQL 類型 Oracle 類型 binary byte VARBINARY( 或 BLOB) BLOB BLOB text String CLOB TEXT CLOB

14、serializable Serializable 接口任意實現(xiàn)類 VARBINARY( 或 BLOB) BLOB BLOB clob CLOB TEXT CLOB blob BLOB BLOB BLOB 在程序中通過 Hibernate 來保存 java.sql.Clob 或者 java.sql.Blob 實例時,必須包含兩個步驟: 1 在一個數(shù)據(jù)庫事務中先保存一個空的 Blob 或 Clob 實例。 2 接著鎖定這條記錄,更新上面保存的 Blob 或 Clob 實例,把二進制數(shù)據(jù)或文本數(shù)據(jù)寫到 Blob 或 Clob 實例中 Hibernate SQL方言 (hibernate.diale

15、ct) RDBMS方言 DB2DB2 AS/400DB2 OS390PostgreSQLMySQLMySQL with InnoDBMySQL with MyISAMOracle (any version)Oracle 9i/10gSybaseSybase AnywhereMicrosoft SQL ServerSAP DBInformixHypersonicSQLIngresProgressMckoi SQLInterbasePointbaseFrontBaseFirebirdID生成策略1.XML方式配置可選的子元素是一個Java類的名字, 用來為該持久化類的實例生成唯一的標識。如果這個生

16、成器實例需要某些配置值或者初始化參數(shù), 用元素來傳遞。 uid_table next_hi_value_column 所有的生成器都實現(xiàn)org.hibernate.id.IdentifierGenerator接口。 這是一個非常簡單的接口;某些應用程序可以選擇提供他們自己特定的實現(xiàn)。當然, Hibernate提供了很多內置的實現(xiàn)。下面是一些內置生成器的快捷名字: l increment 用于為long, short或者int類型生成 唯一標識。只有在沒有其他進程往同一張表中插入數(shù)據(jù)時才能使用。 在集群下不要使用。 l identity 對DB2,MySQL, MS SQL Server, Sy

17、base和HypersonicSQL的內置標識字段提供支持。 返回的標識符是long, short 或者int類型的。 l sequence 在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator)。返回的標識符是long, short或者 int類型的。 l hilo 使用一個高/低位算法高效的生成long, short 或者 int類型的標識符。給定一個表和字段(默認分別是 hibernate_unique_key 和next_hi)作為高位值的來源。 高/低位算法生成的標識符只在

18、一個特定的數(shù)據(jù)庫中是唯一的。 l seqhilo 使用一個高/低位算法來高效的生成long, short 或者 int類型的標識符,給定一個數(shù)據(jù)庫序列(sequence)的名字。 l uuid 用一個128-bit的UUID算法生成字符串類型的標識符, 這在一個網(wǎng)絡中是唯一的(使用了IP地址)。UUID被編碼為一個32位16進制數(shù)字的字符串。 l guid 在MS SQL Server 和 MySQL 中使用數(shù)據(jù)庫生成的GUID字符串。 l native 根據(jù)底層數(shù)據(jù)庫的能力選擇identity, sequence 或者hilo中的一個。在mysql中默認的是auto_increment,SQ

19、LSERVER中是identity.l assigned 讓應用程序在save()之前為對象分配一個標示符。這是 元素沒有指定時的默認生成策略。 l select 通過數(shù)據(jù)庫觸發(fā)器選擇一些唯一主鍵的行并返回主鍵值來分配一個主鍵。 l foreign 使用另外一個相關聯(lián)的對象的標識符。通常和聯(lián)合起來使用。 l sequence-identity 一種特別的序列生成策略,使用數(shù)據(jù)庫序列來生成實際值,但將它和JDBC3的getGeneratedKeys結合在一起,使得在插入語句執(zhí)行的時候就返回生成的值。目前為止只有面向JDK 1.4的Oracle 10g驅動支持這一策略。注意,因為Oracle驅動程

20、序的一個bug,這些插入語句的注釋被關閉了。(原文:Note comments on these insert statements are disabled due to a bug in the Oracle drivers.) 2 annotation中配置id生成策略使用Id注解可以將實體bean中的某個屬性定義為標識符(identifier). 該屬性的值可以通過應用自身進行設置, 也可以通過Hiberante生成(推薦). 使用 GeneratedValue注解可以定義該標識符的生成策略: 有四種策略l AUTO -默認值.可以是identity column類型,或者sequen

21、ce類型或者table類型,取決于不同的底層數(shù)據(jù)庫.對于MYSQL,是auto_increment,對于Oracle是hibernate-sequence.l TABLE - 使用表保存id值 (了解)l IDENTITY - identity column l SEQUENCE - SequenceGeneratorGeneratedValue(strategy=GenerationType.XXXX)XXXX取值為Type.SEQUENCE|TABLE|AUTO|IDENTITY不同的數(shù)據(jù)庫對應著不同的生成策略.例1實體類注解Entity主鍵進行注解IdGeneratedValue 默認值

22、是GeneratedValue(strategy=GenerationType.AUTO)例2使用SequenceGeneratorEntitySequenceGenerator(name=teacher_SEQUENCE,sequenceName=teacher_SEQUENCE_DB)name是用戶自定義的generator生成器的名字, sequenceName是生成到數(shù)據(jù)庫后sequence對象的名字.在實體中注解好后,就可以在id注解上寫上對應的IdGeneratedValue(strategy=GenerationType.IDENTITY,generator=teacher_SE

23、QUENCE)例3表生成器(了解),這種方式會另外生成一個表.實體類注解Entityjavax.persistence.TableGenerator(/了解,更適合用于跨平臺跨數(shù)據(jù)庫. name=TEACHER_GEN, /生成器generator的名字 table=GENERATOR_TABLE,/生成的表名 pkColumnName = pk_key,/生成的表的字段名 valueColumnName = pk_value,/生成的表的字段的值 pkColumnValue=teacher,/ pk_key字段的值 allocationSize=1/自增變量)主鍵注解IdGeneratedV

24、alue(strategy=GenerationType.TABLE,generator=TEACHER_GEN)l 聯(lián)合主鍵生成策略一般采用這種方式,比如有一個類Student(id,name,age),為了產(chǎn)生聯(lián)合主鍵,把id和name分離出來.Student(pk,age) StudentPk(id,name)StudentPk類必需實現(xiàn)序列化接口implements.StudentPk類必需重寫boolean equals() ,int hasCode()方法Overridepublic boolean equals(Object o) if(o instanceof StudentP

25、k) StudentPk pk = (StudentPk)o;if(this.id = pk.getId() & .equals(pk.getName() return true;return false;Overridepublic int hashCode() return .hashCode();聯(lián)合主鍵生成策略XML配置方法聯(lián)合主鍵生成策略annotation配置方法定義組合主鍵的三種方式:l (少用)將組件類注解為Embeddable,并將組件的屬性注解為Id.實體模型Teacher(teacherPK,age) TeacherPk(id,name

26、)在TeacherPk(id,name)中把類注解Embeddable在Teacher(teacherPK,age)中把組件屬性teacherPK注解Idl 將組件的屬性注解為EmbeddedId. 實體模型Teacher(teacherPK,age) TeacherPk(id,name)只需要在Teacher(teacherPK,age)中把組件屬性teacherPK注解EmbeddedIdl (推薦使用)將類注解為IdClass,并將該實體中所有屬于主鍵的屬性都注解為Id. 實體模型Teacher(id,name,age) TeacherPk(id,name)在Teacher(id,nam

27、e,age)中把類注解IdClass(value=”TeacherPk.Class”),在主鍵屬性id,name上注解Id即可.當IdClass()中只有一個屬性默認寫成IdClass(TeacherPk.Class).也就是說Teacher里面的組件屬性id,name,合起來剛好是類TeacherPk.對象的三種狀態(tài)三種狀態(tài)的區(qū)別在于:有沒有ID,ID在數(shù)據(jù)庫中有沒有,在內存中有沒有(session緩存)三種狀態(tài)Transient:內存中的一個對象,沒有ID,緩存中也沒有Persistent:內存中有,緩存中有,數(shù)據(jù)庫中有IDDetached:內存中有,緩存中沒有,數(shù)據(jù)庫有ID核心接口開發(fā)介

28、紹Configuration1 AnnotationConfiguration2 進行配置信息的管理3 用來產(chǎn)生SessionFactory:buildSessionFactory()4 可以在configure()方法中指定hibernate配置文件SchemaExport可以在程序中控制生成建表語名.位于包import org.hibernate.tool.hbm2ddl.SchemaExport;create(booleanscript,booleanexport)script - print the DDL to the console export - export the scri

29、pt to the databaseConfiguration cfg=new AnnotationConfiguration().configure();SchemaExport export=new SchemaExport(cfg);export.create(true, true);或者new SchemaExport(new AnnotationConfiguration().configure().create(false, true);SessionFactory1 用來產(chǎn)生和管理sesssion2 通常情況下,每個應用只需要一個SessionFactory,除非要訪問多個數(shù)據(jù)庫

30、的情況3 openSession()與openSession()l openSession()總是創(chuàng)建新的session,需要手動close().l getCurrentSession()事務自動提交并且自動關閉.從上下文環(huán)境中獲得session,如果當時環(huán)境中不存就創(chuàng)建新的.如果環(huán)境中存在就使用環(huán)境中的,而且每次得到的都是同一個session(在session提交之前,提交之后就是新的了).用途:界定事務邊界.l 所謂的上下文參見配置文件thread取值范圍 jta | thread | managed | custom.Class JTA簡介Session管理一個數(shù)據(jù)庫的任務單元,即管理數(shù)

31、據(jù)庫中的增刪改查操作,提交事務.方法CRUD:save(),delete(),update(),saveOrUpdate(),load(),get(),clear().session.beginTransaction();session.save(Object obj);session.getTransaction().commit();session.close();get()與load()的區(qū)別l 查找時,都會優(yōu)先從session的緩存中查找.l 查找不存在對應記錄時,表現(xiàn)不一樣.load方法查找不到時不會報錯,get查找不到時會報錯.l Load返回的是代理對象,等到真正要用到對象的內容

32、時才發(fā)起SQL語句.get直接發(fā)起SQL語句從數(shù)據(jù)庫中取出,不會延遲.Update()方法1 用來更新detached對象,更新完成之后成為persistent.2 更新transient對象會報錯. 更新自己設定id(前提是id在數(shù)據(jù)庫中存在)的transient對象可以.3 持久化的對象只要設定不同字段就會發(fā)生更新4 更新部分更改的字段(三種方法)l XML設定property標簽的update=true|false屬性,annotation設定Column(updatable=false)屬性,這種方式少用,不靈活.l XML設定class標簽的dynamic-update=”true”

33、屬性,同一個session中可以,跨session不行.跨session時的實現(xiàn)方法不過可以用session的merge().merge方法會先從數(shù)據(jù)庫load,將得到的和數(shù)據(jù)庫中的進行對比,再update更改過的字段.JPA1.0 Annotation沒有對應的屬性,Hibernatel 使用HQL(EJBQL)(建議使用)clear()方法:清除session中的緩存.調用clear()方法會強制清除session緩存.不會與數(shù)據(jù)庫打交道.flush()方法:當session的事務提交后,會強制進行從內存(session緩存)到數(shù)據(jù)庫的同步.默認情況下是session的事務提交時才同步.不

34、常用.Query接口關系映射這里的關系映射指的是對象之間的關系,并不是指數(shù)據(jù)庫的關系. 關系映射解決的問題是,當對象處于各種關系時,數(shù)據(jù)庫表該如何映射,編程時如何處理.一對一:單向(主鍵,外鍵),雙向(主鍵,外鍵)一對多:單向,雙向(和多對一雙向相同)多對一:單向,雙向(一對多雙向和多對一雙向是一樣的)多對多:單向,雙向(一對一單/雙向主鍵關聯(lián)映射,只作了解)集合映射:list ,map,set繼承映射(了解):單表,多表,一張主表多張子表組件映射:Embeddable,Embedded一對一(one to one) 單向關聯(lián)映射兩個對象是一對一的的關系.有兩種策略可以實現(xiàn)一對一的關聯(lián)映射l

35、主鍵關聯(lián):即讓兩個對象具有相同的主鍵值,以表明他們之間的一對一的對應關系;數(shù)據(jù)庫表不會有額外的字段來維護他們之間的關系,僅通過表的主鍵關系來維護.一對一主鍵關聯(lián)映射默認了級聯(lián)屬性,其關聯(lián)對象會同時存儲.所以不會拋出TransientObjectException異常.l 唯一外鍵關聯(lián):外鍵關聯(lián),本來是用于多對一的配置,但是如果加上唯一的限制之后,也可以表示一對一的關聯(lián)關系. unique=true.單向關聯(lián),如Person-person_id;加載person信息時能關聯(lián)對應的person_id信息雙向關系,加載任何一方,都能關聯(lián)出別一方的信息.注意id的主鍵生成策略,foreign使用另外一

36、個相關聯(lián)的對象的標識符。通常和聯(lián)合起來使用。類Person(id,name,idCard), 類IdCard(id,cardNo)一對一(單向)基于主鍵關聯(lián)映射(了解)XML配置方法一對一單向主鍵關聯(lián)通常使用一個特定的id生成器。 idCard one-to-one不會加載字段,它告訴HIBERNATE怎樣加載其引用對象.如何加載呢,默認根據(jù)主鍵加載其引用對象.如在t_person中查到id=2,自動加載t_idCard中id=2的對象信息. constrained=true,表明person主鍵是個外鍵,表示當前主鍵上存在著idCard約束,當前主鍵id作為外鍵,參照了idCard.idCa

37、rd表明person中的id來源于idCard,也就是共享idCard的主鍵.Annotation配置一對一(單向)主鍵關聯(lián)映射.(BUG)OneToOnePrimaryKeyJoinColumn有BUG,系統(tǒng)不會生成主鍵映射.推薦使用XML配置方法.一對一(單向)基于外鍵關聯(lián)映射和單向多對一關聯(lián)幾乎是一樣的。唯一不同的就是單向一對一關聯(lián)中的外鍵字段具有唯一性約束。這種方法會在表中生成一個新的外鍵字段.如果不限制外字段的唯一性約束,就會導致產(chǎn)生多對一的關聯(lián). 指定多的一端unique=true,這樣就限制了多的一端的多重性為一. 這種狀態(tài)注意TransientObjectException異常

38、.在保存時就先保存外鍵idCard,再保存Person類.一對一單向外鍵關聯(lián)Annotation配置OneToOneJoinColumn(name=指定生成的外鍵字段名字)一對一(雙向)主鍵關聯(lián)映射(了解)PersonIdCard.在另一端也加上一個一對一的單向關聯(lián)映射.模型對象Person(id,name,idCard) IdCard(id,cardNo,person)中,雙方都持有對方的屬性引用.一對一(雙向)主鍵關聯(lián)映射XML配置方式在IdCard配置中建立映射,指示Hibernate如何加載,默認情況下根據(jù)主鍵加載.也就是在基于單向一對一的映射中, 在另一端也加上一個單向一對一的主鍵關

39、聯(lián)映射.在Person一端配置 idCard 在另一端IdCard配置 一對一(雙向)主鍵關聯(lián)映射Annotation(有BUG)在兩端各自的引用屬性上加上OneToOnePrimaryKeyJoinColumn一對一(雙向)唯一外鍵關聯(lián)映射Person-IdCard.在另一端也加上一個一對一的單向關聯(lián)映射.在模型對象Person(id,name,idCard) IdCard(id,cardNo,person),雙方都持有對方的屬性引用.需要在另一端加上,指示hibernate如何加載,默認情況下根據(jù)主鍵加載person;因為外鍵關聯(lián)映射中,兩個實體的關系是由person的外鍵idCard來維

40、護的,所以不能指定person的主鍵來加載person,而應根據(jù)person的外鍵idCard來加載person對象.一對一雙向外鍵關聯(lián)映射XML配置方式Person一端:用多對一配置外鍵唯一形成一對一的配置方式. IdCard一端:一對一,引用另一端外鍵 要想加載idCard,如果不加property-ref,默認根據(jù)person主鍵id來加載,property- ref=idCard就指示hibernate從person里面的idCard屬性來加載.一對一雙向外鍵關聯(lián)映射Annotation配置方式雙方互持對方的屬性的引用關系模型Husband(id,name,wife) Wife(id,

41、name,husband)在Husband一端的wife屬性上注解OneToOne/JoinColumn在Wife一端的husband加上注解,mappedByOneToOne(mappedBy=wife)引用屬性加上mappedBy屬性后就可以在wife這一端告知這個關聯(lián)是在wife屬性上設置的.就不用管理wife這一端生成的husband的設置.生成的wife表格不會有husband字段.規(guī)律:有雙向關聯(lián)時mappedBy通常必設.聯(lián)合主鍵一對一單向外鍵關聯(lián)映射對象模型Wife(id,name,age) WifePk(id,name)Husband(id,name,wife)1 在Wife

42、中建立聯(lián)合主鍵生成策略 IdClass(WifePk.Class) Id2 在Husband中添加個外鍵即可 OneToOne3自定義Husband中外鍵的名字 OneToOneJoinColumns(JoinColumn(name=wifeId, referencedColumnName=id),JoinColumn(name=wifeName, referencedColumnName=name)XML配置方式:略組件映射對象關系:一個對象是另一個對象的一部分數(shù)據(jù)庫表:是一張表Annotation:Embeddable,EmbeddedXML:對象模型Husband(id,name,wif

43、e)Wife(wifeName,wifeAge)Annotation:在Husband的wife屬性上建立注解Embedded 表明該對象是從別的位置嵌入過來的,是不需要單獨映射的表.這種方式生成的表為husband(id,name,wifename,wifeage),不會生成wife表.AttributeOverride注解可以覆蓋該屬性對應的嵌入式對象的列映射:XML: 多對一(many to one)單向關聯(lián)映射多對一的數(shù)據(jù)庫設計原則:在多的那下端加外鍵/注意在創(chuàng)建實體類屬性時應盡量避免與SQL語句中的關鍵字重名.多對一單向關聯(lián)映射實體模型(User多對一Group)User(id,na

44、me,group)多Group(id,groupname)一Annotation配置EntityTable(name=t_group)/注意表名與SQL中關鍵字重名只需要在多的一端User屬性group進行注解配置ManyToOneJoinColumn(name=”groupId”)XML配置標簽會在”多”的一端添加外鍵,相當于在數(shù)據(jù)庫中添加外鍵生成的表為user(id,name,groupid),t_group(id,groupname)屬性cascade取值all,none,save-update,delete,對象間的級聯(lián)操作,只對增刪改起作用.在存儲時User時,設置了cascade=all會自動存儲相應的t_group.而不用管user關聯(lián)的對象(通常情況下會優(yōu)先存儲關聯(lián)的對象,然后再存儲user).一對多(one to many)單向關聯(lián)映射模型(group一對多user)Group(id,name,users)一User(id,name)多設計時在一的這一端存在著多的集合,生成的數(shù)據(jù)庫表通常是在多的一端生成外鍵.Set users=new HashSet()一對多

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論