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