Hibernate 关联映射 之 一对多单项关联 (一)
来源:互联网 发布:遗传算法交叉变异概率 编辑:程序博客网 时间:2024/05/20 11:49
1、联系人和用户组 之间的一对多的单项关联:
联系人示例代码:
<hibernate-mapping><class name="com.shangxuetang.ContactPerson" table="contactPerson"><id name="id"><generator class="native"/></id><property name="name"></property><property name="qq"></property></class></hibernate-mapping>
public class ContactPerson {private int id;private String name;private String qq;ContactPerson(){}public ContactPerson(String name) {this.name = name;}
用户组示例代码:
public class Group {private int id;private String name;private Set<ContactPerson> cps;Group() {}public Group(String name) {this.name = name;}
<hibernate-mapping><class name="com.shangxuetang.Group" table="t_group"><id name="id"><generator class="native"/></id><property name="name"></property><set name="cps"> <key column="gid"></key> <one-to-many class="com.shangxuetang.ContactPerson"/></set></class></hibernate-mapping>
测试用例代码:
public void testOnetoMany() {Session session = HibernateUtil.getSession();//语句20try {session.beginTransaction();ContactPerson cp1 = new ContactPerson("zhangsan");//语句1ContactPerson cp2 = new ContactPerson("LISI");//语句2ContactPerson cp3 = new ContactPerson("WANGWU");//语句3session.save(cp1);//语句4session.save(cp2);//语句5session.save(cp3);//语句6Group g1 = new Group("family");//语句7Group g2 = new Group("friend");//语句8Group g3 = new Group("dog");//语句9Set<ContactPerson> persons1 = new HashSet<ContactPerson>();//语句10persons1.add(cp1);//语句11persons1.add(cp2);//语句12g1.setCps(persons1);//语句13Set<ContactPerson> persons2 = new HashSet<ContactPerson>();//语句14persons2.add(cp3);//语句15g2.setCps(persons2);//语句16session.save(g1);//语句17session.save(g2);//语句18session.save(g3);//语句19session.getTransaction().commit();}catch(Exception e) {e.printStackTrace();session.getTransaction().rollback();}finally {session.close();}}
2、测试用例代码在执行完语句20之后,会把联系人和用户组的表创建好,同时也会把表中的关联关系创建好。如下图联系人用户表:
3、测试用例代码在执行完语句4后会发出insert语句,但不会把数据同步到数据库,直到执行session.getTransaction().commit()事务提交。
4、测试用例代码 语句10 到语句 16 代码不简洁,可以采用GRASP的专家模式进行优化。(专家模式讲究的是一个职责分配)
示例代码如下:
public class Group {private int id;private String name;private Set<ContactPerson> cps;Group() {}public Group(String name) {this.name = name;}public void addCPS(ContactPerson cp) {if(cps != null) {cps = new HashSet<ContactPerson>();}cps.add(cp);}
测试示例代码可以修改为:
public void testOnetoMany() {Session session = HibernateUtil.getSession();//语句20try {session.beginTransaction();ContactPerson cp1 = new ContactPerson("zhangsan");//语句1ContactPerson cp2 = new ContactPerson("LISI");//语句2ContactPerson cp3 = new ContactPerson("WANGWU");//语句3session.save(cp1);//语句4session.save(cp2);//语句5session.save(cp3);//语句6Group g1 = new Group("family");//语句7Group g2 = new Group("friend");//语句8Group g3 = new Group("dog");//语句9//Set<ContactPerson> persons1 = new HashSet<ContactPerson>();//语句10//persons1.add(cp1);//语句11//persons1.add(cp2);//语句12//g1.setCps(persons1);//语句13////Set<ContactPerson> persons2 = new HashSet<ContactPerson>();//语句14//persons2.add(cp3);//语句15//g2.setCps(persons2);//语句16g1.addCPS(cp1);g1.addCPS(cp2);g2.addCPS(cp3);session.save(g1);//语句17session.save(g2);//语句18session.save(g3);//语句19session.getTransaction().commit();}catch(Exception e) {e.printStackTrace();session.getTransaction().rollback();}finally {session.close();}}
- Hibernate 关联映射 之 一对多单项关联 (一)
- Hibernate 关联映射 之 一对多单项关联 (二)聪明的懒加载
- Hibernate 关联映射 之 一对多单项关联 (三)查询
- hibernate练习之单项关联一对多
- Hibernate关联映射---多对一实例分析(单项关联)
- 单项映射一对多关联关系
- hibernate 3.5 一对多单项关联(OneToMany)
- Hibernate一对多单项关联关系
- hibernate映射(二) 之Hibernate单项一对多映射
- Hibernate关联映射-----一对多关联和多对一关联(续)
- Hibernate关联关系映射(一对多/多对一)
- hibernate 关联映射 双向多对一(一对多)
- 【Hibernate框架】关联映射(一对多,多对一)
- hibernate之映射关系一对多(自身关联)
- 【Hibernate步步为营】--(一对多映射)之单向关联
- 【Hibernate步步为营】--(一对多映射)之双向关联
- 【Hibernate步步为营】--(一对多映射)之双向关联
- 【Hibernate步步为营】--(一对多映射)之单向关联
- Java捕获其他窗口事件
- Java捕获选项事件ItemEvent
- Java表格模型事件示例
- Java自动计算表格某一数字列的和
- Java自动计算表格某一数字列的和(2)
- Hibernate 关联映射 之 一对多单项关联 (一)
- tomcat 很久没有用,让后启动了以后,打不开网页
- blog 如何把html转化为jsp
- Hibernate 关联映射 之 一对多单项关联 (二)聪明的懒加载
- 用Enterprise Architect从源码自动生成类图
- C++解析http-chunked数据
- C++指向类成员函数的指针
- 编程技巧:使用LINQ如何通过多次调用GroupBy实现分组嵌套
- Hibernate 关联映射 之 一对多单项关联 (三)查询