hibernate双向一对多映射
双向多对一 :Customer类------------》一的一端 Order类-----------》多的一端
Customer类:(省略set()、get()和构造方法)
private Integer customerId;
private String customerName; private Set<Order> order = new HashSet<>();
Order类:(省略set()、get()和构造方法)
private Integer orderId;
private String orderName;
private Customer customer;
Customer类的映射文件:
<!-- 映射类和数据表 -->
<class name="Customer" table="CUSTOMERS">
<!-- 映射OID和数据表的主键 -->
<id name="customerId" type="java.lang.Integer">
<column name="CUSTOMER_ID"/>
<!-- 指定主键的生成方式 -->
<generator class="native"/>
</id> <!-- 映射属性和字段 -->
<property name="customerName" type="java.lang.String">
<column name="CUSTOMER_NAME"/>
</property> <!-- 映射 1对多的那个集合属性-->
<!-- set:映射set类型的属性,table:set中的元素对应的记录放在哪一个数据表中.该值需要和多对一的多的那个表的名字一致 -->
<!-- inverse:指定由哪一方来维护关联关系,通常设置为true,以指定由多的一端来维护关联关系 -->
<!-- cascade:设定级联操作.值为delete时删除一的这端时会把多的那端的对应记录也删除.delete-orphan解除关系(删除孤儿).save-update级联保存
开发时不建议设定该属性.建议使用手工的方式来处理 -->
<!-- order-by:在查询时对集合中的元素进行排序,order-by中使用的是表的字段名,而不是持久化类的属性名 -->
<set name="order" table="ORDERS" inverse="true" order-by="ORDER_NAME DESC"><!-- 对应那个表inverse反转,放弃维护关联关系 -->
<!-- 指定多的表中的外键列的名字 -->
<key column="CUSTOMER_ID"></key><!-- 外键名 -->
<one-to-many class="Order"/><!-- 指定映射的类型 -->
</set>
Order类的映射文件:
<class name="Order" table="ORDERS">
<id name="orderId" type="java.lang.Integer">
<column name="ORDER_ID" />
<generator class="native" />
</id> <property name="orderName" type="java.lang.String">
<column name="ORDER_NAME" />
</property> <many-to-one name="customer" class="com.nzx.hibernate2.n21.both.Customer" column="CUSTOMER_ID"> </many-to-one>
junit类:
package com.nzx.hibernate2.n21.both; import static org.junit.Assert.*; import org.hibernate.LazyInitializationException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; public class HibernateTest { private SessionFactory sessionFactory;
private Session session;
private Transaction transaction; @Before
public void init() { // 读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure(); ServiceRegistry serviceRigestry = new ServiceRegistryBuilder()
.applySettings(cfg.getProperties()).buildServiceRegistry(); sessionFactory = cfg.buildSessionFactory(serviceRigestry); session = sessionFactory.openSession();
transaction = session.beginTransaction();
} @After
public void destroy() { // 关闭session、sessionFactory transaction.commit();
session.close();
sessionFactory.close();
} @Test
public void testMany2One(){
Customer customer = new Customer();
customer.setCustomerName("BB"); Order order1 = new Order();
order1.setOrderName("ORDER_9"); Order order2 = new Order();
order2.setOrderName("ORDER_7"); //设定关联关系
order1.setCustomer(customer);
order2.setCustomer(customer); customer.getOrder().add(order1);
customer.getOrder().add(order2); /*
* 先插入一的一端
*/
session.save(customer);
session.save(order1);
session.save(order2); /*
* 先插入多的一端
*
*/
// session.save(order1);
// session.save(order2);
// session.save(customer);
} }
hibernate双向一对多映射的更多相关文章
- Hibernate 双向一对多映射
附代码: public class Order { private Integer id; private String OrderName; private Customer customer; p ...
- hibernate进阶--一对多映射配置
hibernate作为一款优秀的ORM框架,广受大家喜爱,也被Java社区公认为持久层的首选.虽然jdbc为Java数据库操 作带来了诸多便利,但是并没有统一SQL语句的写法,而且具体操作数据库的代码 ...
- 菜鸡的Java笔记 - java 双向一对多映射
双向一对多映射 two-way 开发要求: 根据数据表的结构进行简单java类的转换: 要求实现如下的输出信息: 可以根据课程取得全部参与 ...
- Hibernate学习之双向一对多映射(双向多对一映射)
© 版权声明:本文为博主原创文章,转载请注明出处 1.双向映射与单向映射 - 一对多单向映射:由一方(教室)维护映射关系,可以通过教室查询该教室下的学生信息,但是不能通过学生查询该学生所在教室信息: ...
- hibernate笔记--双向一对多映射方法
前两节写了两个例子,分别是单向多对一的映射和单向一对多的映射,这一节继续以这个例子讲一下双向一对多的映射方法,如下图所示: 很多时候,我们既想从一对端获取多对端的信息,又想从多对端获取一对端的数据,这 ...
- Hibernate(六):映射一对多关联关系、双向一对多映射
在领域模型中,类与类之间最普通的关系就是关联关系. 在UML中,关联是有方向的: 例如:Customer与Order,一个用户能发出多个订单,而一个订单只能属于一个用户. 单向关联 1)从Order到 ...
- hibernate之一对多映射
目录 第一章 课程简介 第二章 Hibernate中的单向一对多关联 2-1 一对多映射简介 2-2 hibernate的基础配置 2-3 创建HibernateUtil工具类 2-4 在mysql数 ...
- Hibernate双向多对多关联
一.配置双向多对多关联 以Project类(项目)和Emp类(员工)为例: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 priva ...
- 注解:【无连接表的】Hibernate双向1->N关联
Person与Address关联:双向1->N,[无连接表的],推荐使用 #由N端控制关联关系 #对于指定了mappedBy属性的@OneToMany,@ManyToMany,@OneToOne ...
随机推荐
- 检查点--JMeter也有之二“检查点”
检查点:简单的来理解一下,上一章讲到,我们对用户名和密码进行了参数化,那么怎样来判断jmeter有没有正确调用test.dat里面的文件呢.当然,我们可以从结果图表中查看.但我还是想在“登录”这个地方 ...
- rsync + inotify 同步
1. 配置rysnc server:同步机,同步被同步机更新的文件,很多台vi /etc/rsyncd.conf uid=rootgid=rootuse chroot=nomax connection ...
- Maximum Product of Word Lengths -- LeetCode
Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...
- Struts2笔记--文件上传
Servlet 3.0规范的HttpServletRequest已经提供了方法来处理文件上传但这种上传需要在Servlet中完成.而Struts2则提供了更简单的封装. Struts2默认使用的是Ja ...
- QQ协议
http://www.cnblogs.com/sufei/archive/2012/12/13/2816737.html http://www.360doc.com/content/12/0822/1 ...
- sql server 性能调优 资源等待之网络I/O
原文:sql server 性能调优 资源等待之网络I/O 一.概述 与网络I/O相关的等待的主要是ASYNC_NETWORK_IO,是指当sql server返回数据结果集给客户端的时候,会先将结果 ...
- readlink命令
转:http://blog.csdn.net/zz198808/article/details/9319479 readlink是linux系统中一个常用工具,主要用来找出符号链接所指向的位置. 在U ...
- GoodSync
文件管理这件看 似简单的事,真的不简单,因为为了防止意外情况,你需要对文件进行备份,时间一久随着文件数量的增加,再加上有时也会临时队备份文件进行修改等.再想查出 这个是最新的.文件有木有全部备份等…. ...
- JMeter接口测试中文乱码问题总结
在测试过程中遇到了请求json串中文乱码,所以查看了这篇文章,将字符集修改后,乱码问题已经处理. 转载http://blog.csdn.net/qing_java/article/details/69 ...
- 小tip: base64:URL背景图片与web页面性能优化
转自:http://www.zhangxinxu.com/wordpress/?p=2341 一.base64百科 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP ...