Hibernate 关联映射 之多对一关联(一)
来源:互联网 发布:马里亚纳网络战争七区 编辑:程序博客网 时间:2024/06/06 02:45
1、Hibernate关联映射的目标:
1) 将内存中的关联信息,存储到数据库
2)从数据库中取出数据,并在内存中重建关联
2、关联关系要弄清,首先学会建模:若多对一单项关联:
看下图:首先看箭头的指向,说明是多对一,另外group是ContactPerson里面关联的对象,所以不会出现在ContactPerson属性图里面。
图:
根据图代码示例如下:
public class ContactPerson {private int id;private String name;private String qq;private Group group;ContactPerson(){}public ContactPerson(String name) {this.name = name;}public int getId() {return id;}
public class Group {private int id;private String name;Group() {}public Group(String name) {this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}
<hibernate-mapping><class name="com.shangxuetang.ContactPerson" table="contactPerson"><id name="id"><generator class="native"/></id><property name="name"></property><property name="qq"></property><many-to-one name="group" column="gid"/></class></hibernate-mapping>
<hibernate-mapping><class name="com.shangxuetang.Group" table="t_group"><id name="id"><generator class="native"/></id><property name="name"></property></class></hibernate-mapping>
测试代码:
public void testManyToOne() {Session session = HibernateUtil.getSession();try {session.beginTransaction();ContactPerson cp1 = new ContactPerson("a");ContactPerson cp2 = new ContactPerson("b");ContactPerson cp3 = new ContactPerson("c");session.save(cp1);session.save(cp2);session.save(cp3); Group g1 = new Group("family"); Group g2 = new Group("friend"); session.save(g1); session.save(g2); cp1.setGroup(g1); cp2.setGroup(g2); session.getTransaction().commit();}catch(Exception e) {e.printStackTrace();session.getTransaction().rollback();}finally {session.close();}}
执行之后数据库的值为:
3、2中的测试示例代码与之下的测试示例代码,性能不好,因为前者执行之后,会多发出三条update语句。
语句7、8、9、10 移到语句123456之前,语句11、12移到语句4、5、6之前。
public void testManyToOne() {Session session = HibernateUtil.getSession();try {session.beginTransaction(); Group g1 = new Group("family");//语句7 Group g2 = new Group("friend");//语句8 session.save(g1);//语句9 session.save(g2);//语句10 ContactPerson cp1 = new ContactPerson("a");//语句1ContactPerson cp2 = new ContactPerson("b");//语句2ContactPerson cp3 = new ContactPerson("c");//语句3cp1.setGroup(g1);//语句11cp2.setGroup(g2);//语句12session.save(cp1);//语句4session.save(cp2);//语句5session.save(cp3);//语句6session.getTransaction().commit();}catch(Exception e) {e.printStackTrace();session.getTransaction().rollback();}finally {session.close();}}
这是hibernate性能优化的措施:多对一关联,一般先有“一”,然后再有“多”,从“多”一端,建立和“一”之间的关联。
- Hibernate 关联映射 之多对一关联(一)
- Hibernate映射之多对一关联映射
- hibernate之多对一关联映射
- 【Hibernate步步为营】--关联映射之多对一
- 【Hibernate步步为营】--关联映射之多对一
- 【HIbernate】(五)关联映射之多对一映射
- 【HIbernate】(五)关联映射之多对一映射
- Hibernate关联映射之多对一单向关联映射
- hibernate关联映射之多对一单向关联
- Hibernate(2)关联映射之多对一
- 【Hibernate系列】(五):关联映射之多对一
- 关联映射之多对一
- Hibernate关联映射之多对一、一对一映射
- Hibernate 关联映射 之多对一关联(二) 懒加载
- Hibernate关联关系映射(多对一关联映射)
- Hibernate关联映射之多对一/一对多双向关联映射
- 06-MyBatis_关联映射之多对一
- Hibernate 关联映射 之 多对多 关联(一)
- backtrace on mips
- 雪
- POJ 2109 算数积累
- 函数----SetWindowPos
- 黑马程序员学习日记------MSSQL表连接
- Hibernate 关联映射 之多对一关联(一)
- 创业十诫之一:过早迈出创业第一步
- Flex获取html容器传递的URL参数值(转)
- 一个DirectDraw入门程序
- 生成单号 by Oracle proc
- Normalized Cut
- struts2 文件上传属性 enctype
- lucene -- 5 得分 设置boost
- <谷歌如何测试> 译者序