博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate关联关系之双向1—n
阅读量:4317 次
发布时间:2019-06-06

本文共 3029 字,大约阅读时间需要 10 分钟。

•双向 1-n 与双向 n-1 是完全相同的两种情形

•双向 1-n 需要在1的一端可以访问n的一端,反之依然.

测试实例代码:

实体类:

package com.elgin.hibernate.nto1both;public class Order {   	private int orderId;	private String orderName;	private Customer customer;	public int getOrderId() {		return orderId;	}	public void setOrderId(int orderId) {		this.orderId = orderId;	}	public String getOrderName() {		return orderName;	}	public void setOrderName(String orderName) {		this.orderName = orderName;	}	public Customer getCustomer() {		return customer;	}	public void setCustomer(Customer customer) {		this.customer = customer;	}	}
package com.elgin.hibernate.nto1both;import java.util.HashSet;import java.util.Set;public class Customer {   	private int customerId;	private String customerName;	/**	 * 1.需要把集合初始化,可以防止发生空指针异常	 * 2.声明集合时,需使用接口类型,因为hibernate在获取集合类型时	 * 返回的是hibernate内置的集合类型,而不是JAVASE标准的集合实现	 * 	 * */	private Set
orders=new HashSet
(); public int getCustomerId() { return customerId; } public void setCustomerId(int customerId) { this.customerId = customerId; } public String getCustomerName() { return customerName; } public void setCustomerName(String customerName) { this.customerName = customerName; } public Set
getOrders() { return orders; } public void setOrders(Set
orders) { this.orders = orders; } }
实体类对应的hbm映射文件:

Order.hbm.xml 

Customer.hbm.xml

Junit 单元测试类:

/*	 *双向n-1与1-n (完全相同的2种情形)	 */	@Test	public void testMany2OneBothSave(){		Customer customer=new Customer();		customer.setCustomerName("AAaa");				Order order1=new Order();		order1.setOrderName("order-115");		order1.setCustomer(customer);				Order order2=new Order();		order2.setOrderName("order-116");		order2.setCustomer(customer);				customer.getOrders().add(order1);		customer.getOrders().add(order2);				//先插入customer,发出3条insert语句, 2条update语句		//因为1的一端和n的一端都维护关联关系,所以会多出2条update语句		//可以在1的一端set节点指定属性inverse="true"来制定让1的一端放弃维护关联关系		//建议设定inverse="true",建议先插入1的一端,再插入多的一端		session.save(customer);		session.save(order1);		session.save(order2);		//先插入order,发出3条insert语句, 4条update语句 ,推荐先插入 customer//		session.save(order1);//		session.save(order2);//		session.save(customer);	}		@Test	public void testOne2ManyBothGet(){		//1、对n的一端的集合采用延迟加在		Customer customer=(Customer) session.get(Customer.class, 1);		System.out.println(customer.getCustomerName());		//2、返回的n的一端的集合类型是Hibernate内置的集合类型		//  该类型具有延迟加载和存放代理对象的功能		//3、同样在需要使用集合中元素的时候初始化,如果此时session已关闭,会抛出懒加载异常		System.out.println(customer.getOrders().getClass().getName());	}

转载于:https://www.cnblogs.com/elgin-seth/p/5293776.html

你可能感兴趣的文章
kettle java交互_通过Java调取Kettle的结果集
查看>>
mysql 导致iis 假死_解决IIS无响应假死状态
查看>>
mysql数据库读取快照隔离_CookBook/1-MySQL数据库读写锁示例详解、事务隔离级别示例详解.md at master · cuiko/CookBook · GitHub...
查看>>
skinme java 路径错误_java 错误 classes路径配置错误
查看>>
python安装tensorflow gpu_[tensorflow] tensorflow-cpu/gpu 安装过程
查看>>
java二维数组矩阵_获取从二维数组矩阵的行和列在Java中
查看>>
scala mysql连接池_Scala 操作Redis使用连接池工具类RedisUtil
查看>>
css背景图片高斯模糊_CSS3 filter(滤镜) 制作图片高斯模糊无需JS
查看>>
matlab综合实验题库,数学实验matlab题库答案
查看>>
oracle wri$_adv_objects突增,SYSTEM Tablespace — oracle-tech
查看>>
python抓取oracle数据,python爬虫,抓取oracle-base上的一些常用脚本
查看>>
oracle分页用子查询,[亲测]Oracle查询--子查询,分页查询(二)
查看>>
oracle动态语句怎么传参数值,DATAX动态参数数据传递
查看>>
php怎么设置文本区域,PHP txt下载不写文本区域内容
查看>>
linux各个目录名称,描述Linux发行版的系统目录名称命名规则以及用途
查看>>
linux 脚本里切换用户密码,shell,切换用户,执行指定,脚本
查看>>
linux配置无密码登陆,Linux下配置ssh无密码登录
查看>>
linux视频对讲qt方案,QT下视频通话的实现
查看>>
顺序串c语言,数据结构c语言实现定长顺序串
查看>>
linux 安装qq2014,Ubuntu14.04安装wine QQ
查看>>