hibernate级联保存与删除

上传人:第*** 文档编号:30556784 上传时间:2018-01-30 格式:DOCX 页数:11 大小:99.34KB
返回 下载 相关 举报
hibernate级联保存与删除_第1页
第1页 / 共11页
hibernate级联保存与删除_第2页
第2页 / 共11页
hibernate级联保存与删除_第3页
第3页 / 共11页
hibernate级联保存与删除_第4页
第4页 / 共11页
hibernate级联保存与删除_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《hibernate级联保存与删除》由会员分享,可在线阅读,更多相关《hibernate级联保存与删除(11页珍藏版)》请在金锄头文库上搜索。

1、Hibernate 为程序员提供一种级联操作,在编写程序时,通过 Hibernate 的级联功能可以很方便的操作数据库的主从表的数据,我们最常用的级联是级联保存和级联删除,下面分别来看一下级联保存和级联删除。我准备了 MenuPanel 和 Menu 两个对象,先来看一下两个对象的关系从上图可以看出,MenuPanel 和 Menu 是一对多的关系,Menu 表同时存在多个子节点,用 parentId 代表该节点的父节点。在 JPA 中,配置级联操作我们可以用 cascade=CascadeType.ALL,意思是支持所有的级联操作,网上有很多文章说级联保存用 CascadeType.PERS

2、IST,这也是可以的,我们分别在代码中使用以上两个类型。在 MenuPane 的 getChildren()方法中标上下面的注解:OneToMany(cascade=CascadeType.PERSIST,fetch=FetchType.LAZY,mappedBy=menu)public List getChildren() return children;在 Menu 的 getChildren()的方法中标上下面的注解OneToMany(cascade=CascadeType.PERSIST,fetch=FetchType.LAZY,mappedBy=menu)public List ge

3、tChildren() return children;以上代码实现级联保存的配置,我们需要在业务逻辑中为对象设置关系,这样Hibernate 才能自动实现级联保存,如果只是配置了级联操作,而没有在对象中设置对象之前的关系,Hibernate 是无法实现级联保存的功能的。首先实例化 MenuPanelMenuPanel panel1 = new MenuPanel(基础设置);再实例化几个 MenuMenu menuCard=new Menu(会员卡设置 ,);menuCard.setLeaf(false);Menu menu1 = new Menu(卡类型设置, basicOperation

4、/queryCardType);Menu menu2 = new Menu(站点设定, basicOperation/querySite);Menu menu3 = new Menu(操作员授权, basicOperation/queryOperatorSet);Menu menu4 = new Menu(密码修改, test.do);Menu menu5 = new Menu(消费项目管理, test1.do);我们要把 menuCard 作为 menu1 的父节点,故作如下设置List cardChildMenus=new ArrayList();cardChildMenus.add(me

5、nu1);menuCard.setChildren(cardChildMenus);/把卡类型设置作为会员卡设置的子菜单设置对象之间的关系,这一步很关键,直接影响保存结果menu1.setMenu(menuCard);/为会员卡设置设置卡类型设置,以支持级联保存menuCard.setMenuPanel(panel1);/设置Menu 属于MenuPanelmenu2.setMenuPanel(panel1);menu3.setMenuPanel(panel1);menu4.setMenuPanel(panel1);menu5.setMenuPanel(panel1);/将 Menu添加到Me

6、nuPanelpanel1.getMenus().add(menuCard);panel1.getMenus().add(menu2);panel1.getMenus().add(menu3);panel1.getMenus().add(menu4);panel1.getMenus().add(menu5);具体代码:Overridepublic boolean testAdd() List menuPanels=new ArrayList();MenuPanel panel1 = new MenuPanel(基础设置);Menu menuCard=new Menu(会员卡设置 ,);menu

7、Card.setLeaf(false);Menu menu1 = new Menu(卡类型设置, basicOperation/queryCardType);Menu menu2 = new Menu(站点设定, basicOperation/querySite);Menu menu3 = new Menu(操作员授权, basicOperation/queryOperatorSet);Menu menu4 = new Menu(密码修改, test.do);Menu menu5 = new Menu(消费项目管理, test1.do);menu1.setMenu(menuCard);/为会员

8、卡设置设置卡类型设置,以支持级联保存menuCard.setMenuPanel(panel1);menu2.setMenuPanel(panel1);menu3.setMenuPanel(panel1);menu4.setMenuPanel(panel1);menu5.setMenuPanel(panel1);List cardChildMenus=new ArrayList();cardChildMenus.add(menu1);menuCard.setChildren(cardChildMenus);/把卡类型设置作为会员卡设置的子菜单panel1.getMenus().add(menuC

9、ard);panel1.getMenus().add(menu2);panel1.getMenus().add(menu3);panel1.getMenus().add(menu4);panel1.getMenus().add(menu5);MenuPanel panel2 = new MenuPanel(日常操作);Menu menu10 = new Menu(发行新卡 , operate/cardList?type=add);Menu menu11 = new Menu(存款入卡 , operate/cardList?type=depositMoney);Menu menu12 = new

10、 Menu(卡中取款 , operate/cardList?type=drawMoney);Menu menu13 = new Menu(奖品管理 , operate/cardList?type=prize);Menu menu14 = new Menu(卡挂失 , operate/cardList?type=reportLoss);Menu menu15 = new Menu(卡解挂 , operate/cardList?type=cancelLoss);Menu menu16 = new Menu(并卡 , operate/cardList?type=mergeCard);Menu men

11、u17 = new Menu(补办新卡 , operate/cardList?type=mendCard);Menu menu18 = new Menu(回收旧卡 , operate/cardList?type=recycleCard);Menu menu19 = new Menu(维护 , operate/cardList?type=maintain);menu10.setMenuPanel(panel2);menu11.setMenuPanel(panel2);menu12.setMenuPanel(panel2);menu13.setMenuPanel(panel2);menu14.se

12、tMenuPanel(panel2);menu15.setMenuPanel(panel2);menu16.setMenuPanel(panel2);menu17.setMenuPanel(panel2);menu18.setMenuPanel(panel2);menu19.setMenuPanel(panel2);panel2.getMenus().add(menu10);panel2.getMenus().add(menu11);panel2.getMenus().add(menu12);panel2.getMenus().add(menu13);panel2.getMenus().add

13、(menu14);panel2.getMenus().add(menu15);panel2.getMenus().add(menu16);panel2.getMenus().add(menu17);panel2.getMenus().add(menu18);panel2.getMenus().add(menu19);menuPanels=new ArrayList();menuPanels.add(panel1);menuPanels.add(panel2);return menuPanelDao.add(menuPanels);执行一下单元测试,看一下效果Testpublic void te

14、st()/ menuPanelService.delete();menuPanelService.testAdd();Hibernate: insert into MENUPANEL (text, id) values (?, ?)Hibernate: insert into MENU (leaf, parentId, menuPanelId, text, url, id) values (?, ?, ?, ?, ?, ?)Hibernate: insert into MENU (leaf, parentId, menuPanelId, text, url, id) values (?, ?,

15、 ?, ?, ?, ?)Hibernate: insert into MENU (leaf, parentId, menuPanelId, text, url, id) values (?, ?, ?, ?, ?, ?)Hibernate: insert into MENU (leaf, parentId, menuPanelId, text, url, id) values (?, ?, ?, ?, ?, ?)Hibernate: insert into MENU (leaf, parentId, menuPanelId, text, url, id) values (?, ?, ?, ?,

16、 ?, ?)Hibernate: insert into MENUPANEL (text, id) values (?, ?)Hibernate: insert into MENU (leaf, parentId, menuPanelId, text, url, id) values (?, ?, ?, ?, ?, ?)Hibernate: insert into MENU (leaf, parentId, menuPanelId, text, url, id) values (?, ?, ?, ?, ?, ?)Hibernate: insert into MENU (leaf, parentId, menuPanelId, text, url, id) values (?, ?, ?, ?, ?

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号