Hibernate中双向的一对多关系
何为双向,双向的意思就是你我之间可以互相通信(customer(1)和order(n))
也就是说customer可以访问order,order也可以访问customer
二者构成了双向的关系
在Hibernate中如何实现双向的一对多关系呢??
步骤:
I在1的一端(也就是customer)添加n端(order)的集合列表,并添加get和set方法
- package com.jeremy.hibernate.app.example.both;
- import java.util.HashSet;
- import java.util.Set;
- public class Customer {
- private Integer customerId;
- private String customerName;
- /*
- * 1. 声明集合类型时, 需使用接口类型, 因为 hibernate 在获取
- * 集合类型时, 返回的是 Hibernate 内置的集合类型, 而不是 JavaSE 一个标准的
- * 集合实现.
- * 2. 需要把集合进行初始化, 可以防止发生空指针异常
- */
- private Set<Order> orders = new HashSet<>();
- public Integer getCustomerId() {
- return customerId;
- }
- public void setCustomerId(Integer customerId) {
- this.customerId = customerId;
- }
- public String getCustomerName() {
- return customerName;
- }
- public void setCustomerName(String customerName) {
- this.customerName = customerName;
- }
- public Set<Order> getOrders() {
- return orders;
- }
- public void setOrders(Set<Order> orders) {
- this.orders = orders;
- }
- }
II在n端(order)中添加customer属性:
- package com.jeremy.hibernate.app.example.both;
- public class Order {
- private Integer orderId;
- private String orderName;
- private Customer customer;
- public Integer getOrderId() {
- return orderId;
- }
- public void setOrderId(Integer 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;
- }
- }
III.在customer.hbm.xml文件中配置集合order的信息
- <?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping package="com.atguigu.hibernate.entities.n21.both">
- <class name="Customer" table="CUSTOMERS">
- <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 设定级联操作. 开发时不建议设定该属性. 建议使用手工的方式来处理 -->
- <!-- order-by 在查询时对集合中的元素进行排序, order-by 中使用的是表的字段名, 而不是持久化类的属性名 -->
- <set name="orders" table="ORDERS" inverse="true" cascade="delete" order-by="ORDER_NAME DESC">
- <!-- 执行多的表中的外键列的名字 -->
- <key column="CUSTOMER_ID"></key>
- <!-- 指定映射类型 -->
- <one-to-many class="Order"/>
- </set>
- </class>
- </hibernate-mapping>
IV在order.hbm.xml文件中配置many-to-one的信息
- <?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping package="com.atguigu.hibernate.entities.n21.both">
- <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: 多这一端关联的一那一端的属性的名字
- class: 一那一端的属性对应的类名
- column: 一那一端在多的一端对应的数据表中的外键的名字
- -->
- <many-to-one name="customer" class="Customer" column="CUSTOMER_ID"></many-to-one>
- </class>
- </hibernate-mapping>
这样一对多的双向关系就配置完成了
但是一对多关系的双向配置跟单向的一对多关系有什么优点???后面解决!!!!
Hibernate中双向的一对多关系的更多相关文章
- Hibernate中双向多对多的两种配置方式
Hibernate中双向多对多的两种配置方式 1.建立多对多双向关联关系 package cn.happy.entitys; import java.util.HashSet; import java ...
- hibernate(四) 双向多对多映射关系
序言 莫名长了几颗痘,真TM疼,可能是现在运动太少了,天天对着电脑,决定了,今天下午花两小时去跑步了, 现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感 ...
- 关于hibernate中的session与数据库连接关系以及getCurrentSession 与 openSession() 的区别
1.session与connection,是多对一关系,每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用. 2.多个sessi ...
- hibernate学习(设计一对多 关系 映射)
1,配置文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-conf ...
- Hibernate中的映射关系(一对多)
在数据库中表和表之间的关系有几种,(一对一,一对多,多对多)一对一关系:可以选择任意一方插入外键(one-to-one:one-to-one<--->many-to-one[unique= ...
- Hibernate(6)—— 一对多 和 多对多关联关系映射(xml和注解)总结
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XM ...
- Hibernate映射--基本类映射和对象关系映射(转)
原文地址:http://blog.csdn.net/lovesummerforever/article/details/20901011 尊重原创,请访问原网址 回想一些我们在没有学习ssh的时候 ...
- hibernate注解方式来处理映射关系
在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式 ...
- Openstack_SQLAlchemy_一对多关系表的多表插入实现
目录 目录 Openstack 与 SQLAlchemy 一个多表插入的 Demo 小结 Openstack 与 SQLAlchemy SQLAlchemy 是 Python 语言下的一款开源软件,它 ...
随机推荐
- JsonHelper修改4.0
public class JsonHelper { /// <summary> /// 将对象序列化为JSON格式 /// </summary> /// <param n ...
- Hystrix使用Commond的三种方式
目录(?)[-] 1 依赖引入 2 使用 21 Hystrix command 211 同步执行 212 异步执行 213 反应执行 214 三种模式使用区别 22 Fallback 23 Error ...
- 同一个String在使用不同的charset编码的时候equals仍然是返回true吗
1.对于ASCII字符,是的(只要该charset涵盖了ASCII编码),使用任何charset编码都不会影响equals的判断 2.对于非ASCII字符,不一定.例如同中文字符串"你好&q ...
- Python异常处理try...except...finally raise assert
异常处理:try ...except try代码块放置容易发生异常的语句:except代码块放置处理异常的语句try ...except...finally finally代码快是任何时候都会执行的 ...
- LinQ的简单使用
1.LinQ to Sql类(NET Language Integrated Query (LINQ) ) LINQ定义了大约40个查询操作符,如select.from.in.where以及order ...
- [Busybox]Busybox制作文件系统
问题: 1.目前busybox和bootstrap两种方案制作文件系统,哪种开发周期更短,更加简单? 2.如果需要在文件系统中添加某个package,要怎么做,如vim/udhcpd等? 转自:htt ...
- linux - native task api 测试
#include <stdio.h>#include <signal.h>#include <unistd.h>#include <sys/mman.h> ...
- Unix网络编程中的五种I/O模型_转
转自:Unix网络编程中的的五种I/O模型 下面主要是把unp第六章介绍的五种I/O模型. 1. 阻塞I/O模型 例如UDP函数recvfrom的内核到应用层.应用层到内核的调用过程是这样的:首先把描 ...
- time函数
time函数 time #include<time.h> time_t time(time_t *t); typdef long int time_t; time() returns th ...
- eclipse代码补全按键修改成Tab
https://www.eclipse.org/downloads/compare.php?release=oxygen 下载eclipse带有源文件的版本 打开Eclipse,点击 window - ...