双向多对一 :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双向一对多映射的更多相关文章

  1. Hibernate 双向一对多映射

    附代码: public class Order { private Integer id; private String OrderName; private Customer customer; p ...

  2. hibernate进阶--一对多映射配置

    hibernate作为一款优秀的ORM框架,广受大家喜爱,也被Java社区公认为持久层的首选.虽然jdbc为Java数据库操 作带来了诸多便利,但是并没有统一SQL语句的写法,而且具体操作数据库的代码 ...

  3. 菜鸡的Java笔记 - java 双向一对多映射

    双向一对多映射    two-way    开发要求:        根据数据表的结构进行简单java类的转换:        要求实现如下的输出信息:            可以根据课程取得全部参与 ...

  4. Hibernate学习之双向一对多映射(双向多对一映射)

    © 版权声明:本文为博主原创文章,转载请注明出处 1.双向映射与单向映射 - 一对多单向映射:由一方(教室)维护映射关系,可以通过教室查询该教室下的学生信息,但是不能通过学生查询该学生所在教室信息: ...

  5. hibernate笔记--双向一对多映射方法

    前两节写了两个例子,分别是单向多对一的映射和单向一对多的映射,这一节继续以这个例子讲一下双向一对多的映射方法,如下图所示: 很多时候,我们既想从一对端获取多对端的信息,又想从多对端获取一对端的数据,这 ...

  6. Hibernate(六):映射一对多关联关系、双向一对多映射

    在领域模型中,类与类之间最普通的关系就是关联关系. 在UML中,关联是有方向的: 例如:Customer与Order,一个用户能发出多个订单,而一个订单只能属于一个用户. 单向关联 1)从Order到 ...

  7. hibernate之一对多映射

    目录 第一章 课程简介 第二章 Hibernate中的单向一对多关联 2-1 一对多映射简介 2-2 hibernate的基础配置 2-3 创建HibernateUtil工具类 2-4 在mysql数 ...

  8. Hibernate双向多对多关联

    一.配置双向多对多关联 以Project类(项目)和Emp类(员工)为例: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 priva ...

  9. 注解:【无连接表的】Hibernate双向1->N关联

    Person与Address关联:双向1->N,[无连接表的],推荐使用 #由N端控制关联关系 #对于指定了mappedBy属性的@OneToMany,@ManyToMany,@OneToOne ...

随机推荐

  1. hdu 1501 Zipper dfs

    题目链接: HDU - 1501 Given three strings, you are to determine whether the third string can be formed by ...

  2. CentOS 6.9安装类型选择(Basic Server/Web Server)

    Desktop :基本的桌面系统,包括常用的桌面软件,如文档查看工具. Minimal Desktop:基本的桌面系统,包含的软件更少. Minimal:基本的系统,不含有任何可选的软件包. Basi ...

  3. Matlab中ismember用法

    >> a = magic(3) a = 8 1 6 3 5 7 4 9 2 >> ismember(a,3) ans = 0 0 0 1 0 0 0 0 0 >> ...

  4. SQL SERVER 2012 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 (System.Data)

    标题: 连接到服务器------------------------------ 无法连接到 192.168.1.253. ------------------------------其他信息: 尝试 ...

  5. 认识多渲染目标(Multiple Render Targets)技术【转】

    http://www.cnblogs.com/hellohuan/archive/2008/12/01/1345359.html 首先,渲染到纹理是D3D中的一项高级技术.一方面,它很简单,另一方面它 ...

  6. CentOS6.4 安装 codeblocks-12.11

    FROM: http://blog.csdn.net/theegao/article/details/8750239 一.下载 1.   codeblocks-12.11-1.el6.x86_64.t ...

  7. 清理memcached缓存

    清理memcached缓存 学习了:https://blog.csdn.net/allus0918/article/details/50481927 使用telnet登录 flush_all 命令:

  8. [PWA] Cache JSON Data in a React PWA with Workbox, and Display it while Offline

    We can view the PWA offline because we are caching the static and CDN assets for the app - but the l ...

  9. 【Android工具类】怎样保证Android与server的DES加密保持一致

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在我们的应用程序涉及到比較敏感的数据的时候,我们一般会对数据进行简单的加密.在与server之间的数据交互中 ...

  10. C++ 11 可变模板参数的两种展开方式

    #include <iostream> #include <string> #include <stdint.h> template<typename T&g ...