多对一(Many2One)
生活随笔
收集整理的這篇文章主要介紹了
多对一(Many2One)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
第一種方式: 先創(chuàng)建模型 再生成數(shù)據(jù)庫(kù)的方法;
1、創(chuàng)建模型類,如用戶類(User) 和 組類(Group),創(chuàng)建類中擁有的變量,并生成get和set方法。
manytoone:在多的一端創(chuàng)建一的一端的引用,例如在User中創(chuàng)建private Group group;
2、配置*.hbm.xml Group的映射中只需要配置對(duì)應(yīng)字段即可,另外需要重命名下,因?yàn)間roup是sql中的關(guān)鍵字,在影射中
按提示鍵選擇table 定義新的名稱,如“t_group”等。
3、配置用戶端的映射,配置擁有的字段即可,注意的一點(diǎn)是id的<generator class="native"/> 設(shè)置為native。
native是sql中的id自增。
然后設(shè)置<many-to-one name="group" column="groupid" cascade="all"/> name中的值是User中引用的一的一端的變量,
column中的值是生成到數(shù)據(jù)庫(kù)后的列名,這里可以不輸入,默認(rèn)的名字會(huì)為name的名字,因?yàn)閚ame的名字是group和sql的
關(guān)鍵字沖突,所以要指定column。
* cascade是級(jí)聯(lián)的意思,它有4個(gè)屬性:all、delete、none、save-update。all只對(duì)增查改生效,如果刪除的話會(huì)拋異常
none是無操作、delete則是刪除。
4、然后生成到數(shù)據(jù)庫(kù) 具體生成到數(shù)據(jù)庫(kù)的類代碼如下:
Configuration config = new Configuration().configure();
SchemaExport export = new SchemaExport(config);
export.create(true, true);
5、然后創(chuàng)建測(cè)試類,代碼如下:
如果在user.hbm.xml中不指定cascade的話 下面會(huì)拋出異常,有兩種方法可以解決;
* 第一:在user.hbm.xml中指定cascade;
* 第二:Group group = new Group();
group.setName("系統(tǒng)管理員");
//在這里先把創(chuàng)建出來的group保存一下 session.save(group) 即可;
session.beginTransaction();
Group group = new Group();
group.setName("系統(tǒng)管理員");
User user = new User();
user.setName("Vurtne");
user.setGroup(group);
User user1 = new User();
user1.setName("Neilyo");
user1.setGroup(group);
session.save(user);
session.save(user1);
session.getTransaction().commit();
//這是先創(chuàng)建領(lǐng)域模型的方法,一般這種方法較為常用。
第二種方法:這種是先創(chuàng)建數(shù)據(jù)庫(kù)然后在創(chuàng)建模型,這種方法較為少用,但要了解要會(huì)用。這種方法和上面方法的區(qū)別在于 “外鍵”是在數(shù)據(jù)庫(kù)中設(shè)定的。其它的都大同小異。
在數(shù)據(jù)庫(kù)中設(shè)置外鍵的方法如下:
打開數(shù)據(jù)庫(kù)在表名上點(diǎn)右鍵選擇編輯數(shù)據(jù)庫(kù),然后找到Foreign Keys-按“+”增加外鍵,名字可以自定。ondelete是級(jí)聯(lián)觸發(fā)的意思,一般我們選擇cascade,然后在右邊
Table處選擇要關(guān)聯(lián)的表的id即可例如 a表的id 到 b表的id。
注:以上是兩種方法,比較推薦使用第一種方法。
1、創(chuàng)建模型類,如用戶類(User) 和 組類(Group),創(chuàng)建類中擁有的變量,并生成get和set方法。
manytoone:在多的一端創(chuàng)建一的一端的引用,例如在User中創(chuàng)建private Group group;
2、配置*.hbm.xml Group的映射中只需要配置對(duì)應(yīng)字段即可,另外需要重命名下,因?yàn)間roup是sql中的關(guān)鍵字,在影射中
按提示鍵選擇table 定義新的名稱,如“t_group”等。
3、配置用戶端的映射,配置擁有的字段即可,注意的一點(diǎn)是id的<generator class="native"/> 設(shè)置為native。
native是sql中的id自增。
然后設(shè)置<many-to-one name="group" column="groupid" cascade="all"/> name中的值是User中引用的一的一端的變量,
column中的值是生成到數(shù)據(jù)庫(kù)后的列名,這里可以不輸入,默認(rèn)的名字會(huì)為name的名字,因?yàn)閚ame的名字是group和sql的
關(guān)鍵字沖突,所以要指定column。
* cascade是級(jí)聯(lián)的意思,它有4個(gè)屬性:all、delete、none、save-update。all只對(duì)增查改生效,如果刪除的話會(huì)拋異常
none是無操作、delete則是刪除。
4、然后生成到數(shù)據(jù)庫(kù) 具體生成到數(shù)據(jù)庫(kù)的類代碼如下:
Configuration config = new Configuration().configure();
SchemaExport export = new SchemaExport(config);
export.create(true, true);
5、然后創(chuàng)建測(cè)試類,代碼如下:
如果在user.hbm.xml中不指定cascade的話 下面會(huì)拋出異常,有兩種方法可以解決;
* 第一:在user.hbm.xml中指定cascade;
* 第二:Group group = new Group();
group.setName("系統(tǒng)管理員");
//在這里先把創(chuàng)建出來的group保存一下 session.save(group) 即可;
session.beginTransaction();
Group group = new Group();
group.setName("系統(tǒng)管理員");
User user = new User();
user.setName("Vurtne");
user.setGroup(group);
User user1 = new User();
user1.setName("Neilyo");
user1.setGroup(group);
session.save(user);
session.save(user1);
session.getTransaction().commit();
//這是先創(chuàng)建領(lǐng)域模型的方法,一般這種方法較為常用。
第二種方法:這種是先創(chuàng)建數(shù)據(jù)庫(kù)然后在創(chuàng)建模型,這種方法較為少用,但要了解要會(huì)用。這種方法和上面方法的區(qū)別在于 “外鍵”是在數(shù)據(jù)庫(kù)中設(shè)定的。其它的都大同小異。
在數(shù)據(jù)庫(kù)中設(shè)置外鍵的方法如下:
打開數(shù)據(jù)庫(kù)在表名上點(diǎn)右鍵選擇編輯數(shù)據(jù)庫(kù),然后找到Foreign Keys-按“+”增加外鍵,名字可以自定。ondelete是級(jí)聯(lián)觸發(fā)的意思,一般我們選擇cascade,然后在右邊
Table處選擇要關(guān)聯(lián)的表的id即可例如 a表的id 到 b表的id。
注:以上是兩種方法,比較推薦使用第一種方法。
總結(jié)
以上是生活随笔為你收集整理的多对一(Many2One)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Simulink中的虚拟和非虚拟子系统
- 下一篇: 华为云冰山安全,让用户安心用云