1.持久化對象POJO編寫規(guī)則: 1) 有空參public構(gòu)造器; 2) 提供標(biāo)識屬性,映射數(shù)據(jù)表主鍵; 3) 屬性提供setter和getter方法; 4) 屬性使用基本數(shù)據(jù)類型的包裝類型。基本類型在數(shù)據(jù)庫中不能區(qū)分null和0; 5) 不使用final修飾。如果使用final則無法生成代
1) 有空參public構(gòu)造器;
2) 提供標(biāo)識屬性,映射數(shù)據(jù)表主鍵;
3) 屬性提供setter和getter方法;
4) 屬性使用基本數(shù)據(jù)類型的包裝類型。基本類型在數(shù)據(jù)庫中不能區(qū)分null和0;
5) 不使用final修飾。如果使用final則無法生成代理對象;當(dāng)使用了final,load查詢將如同get查詢。
OID是持久化類與數(shù)據(jù)表主鍵對應(yīng)的屬性,用來唯一區(qū)分持久化對象。
自然主鍵:采用數(shù)據(jù)庫中有意義的列的值作為主鍵(有意義)
代理主鍵:采用自動生成的流水號、UUID作為主鍵(無意義,推薦)
基本類型無法區(qū)分null和0,開發(fā)中POJO屬性都使用包裝類型。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
由hibernate自動完成,原理:先查詢最大值,再插入此值加一。OID必須為long、int或short類型。
優(yōu)點(diǎn):跨數(shù)據(jù)庫。
缺點(diǎn):多線程并發(fā)訪問問題。
由數(shù)據(jù)庫自動完成,要求數(shù)據(jù)庫必須支持自增主鍵。mysql支持,oracle不支持。OID必須為long、int或short類型。
優(yōu)點(diǎn):無并發(fā)訪問問題。
由數(shù)據(jù)庫自動完成遞增,要求數(shù)據(jù)庫必須支持序列。mysql不支持,oracle支持。OID必須為long、int或short類型。
Oracle:
1創(chuàng)建序列:create sequence myseq;
2調(diào)用序列:insert into customer values (myseq.nextval); #序列加一
采用數(shù)據(jù)庫支持的自增策略。 mysql:identity,oracle:sequence。OID必須為long、int或short類型。
優(yōu)點(diǎn):跨數(shù)據(jù)庫平臺。
由數(shù)據(jù)庫自動創(chuàng)建。 uuid是32位唯一字符串,表單主鍵使用varchar類型,POJO對應(yīng)屬性是String類型。
在調(diào)用hibernate時手動指定主鍵的值,用于自然主鍵(有意義的)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public |
(1)編寫POJO類 Person.java:
1 2 3 4 5 6 7 8 9 10 11 | package |
(2)配置POJO.hbm.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
(3)配置hibernate.cfg.xml,加載Person.hbm.xml文件:
(4)操作類的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public |
(5)結(jié)果:
INFO: HHH000262: Table not found: tb_person
2013-11-5 10:07:12 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
ERROR: HHH000388: Unsuccessful: create table db_hibernate.tb_person (namef varchar(255) not null, names varchar(255) not null, age integer, city varchar(255), primary key (namef, names)) type=InnoDB
2013-11-5 10:07:12 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=InnoDB' at line 7
2013-11-5 10:07:12 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000232: Schema update complete
1 2 3 | |
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com