从零打造在线网盘系统之Hibernate配置O/R映射
欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重地阐述SSH三个框架的基础知识,第四部分将会进入项目实战,如果您已经对SSH框架有所掌握,那么可以直接浏览第四章,源码均提供在GitHub/ssh-network-hard-disk上供大家参阅
本篇学习要求
- 主键映射
- 普通属性映射
- 组件映射
- 一对一关联映射
- 多对一单向关联映射
- 多对一双向关联映射
主键映射
注解配置
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
XML配置
<id name="id" column="id">
<!-- 主键的生成策略 -->
<generator class="identity"/>
</id>
Hiberante主键生成策略 http://www.cnblogs.com/hoobey/p/5508992.html
普通属性映射
注解配置
@Basic
@Column(nullable = true)
private String username;
XML配置
<!-- 配置其他的属性 -->
<property name="username" column="username"/>
组件映射
注解配置
组件类
@Embeddable
public class Name {
...
}
组件属性
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "firstName", column = @Column(name = "firstName"))
@AttributeOverride(name = "lastName", column = @Column(name = "lastName"))
})
private Name name;
XML配置
<component name="name" class="com.jimisun.domain.Name">
<property name="first" column="first"/>
<property name="last" column="last"/>
<component>
一对一关联映射
XML配置(模拟商品和商品详情)
商品hbm.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 配置类和表结构的映射 -->
<class name="com.jimisun.domain.Product" table="products">
<!-- 配置id
见到name属性,JavaBean的属性
见到column属性,是表结构的字段
-->
<id name="id" column="id">
<!-- 主键的生成策略 -->
<generator class="increment"/>
</id>
<!-- 配置其他的属性 -->
<property name="name" column="name" type="java.lang.String"/>
<one-to-one name="productDetail" class="com.jimisun.domain.ProductDetail" cascade="all"/>
</class>
</hibernate-mapping>
商品详情hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 配置类和表结构的映射 -->
<class name="com.jimisun.domain.ProductDetail" table="product_details">
<!-- 配置id
见到name属性,JavaBean的属性
见到column属性,是表结构的字段
-->
<id name="id" column="id" type="int">
<!-- 主键的生成策略 -->
<generator class="foreign">
<param name="property">product</param>
</generator>
</id>
<!-- 配置其他的属性 -->
<property name="detatil" column="detatil"/>
<one-to-one name="product" class="com.jimisun.domain.Product" constrained="true"/>
</class>
</hibernate-mapping>
多对一单向关联映射
我们看完了一对一映射我们可以看一下多对一的的映射,这些都是在实际的应用开发中经常用到的,这里提到的单向映射就是单向映射关系,例多个订单和用户之间是多对一的映射关系,但是转换为Java对象来进行表示的时候就是,订单的对象中拥有其所属的用户对象,但是用户对象中并没有包含其拥有的订单,这种单向的映射关系就是单向映射,下面示例是多个订单和用户的单向关联关系表示
配置多的一方
<many-to-one name="customer" column="customer_id" class="com.jimisun.domain.Customer" cascade="all"/>
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
Transaction transaction = session.beginTransaction();
Customer customer = new Customer();
customer.setName("bea");
Order order = new Order();
order.setNumber("1333");
order.setCustomer(customer);
session.save(order);
transaction.commit();
Integer id = order.getId();
Transaction transaction1 = session.beginTransaction();
Order order1 = session.get(Order.class, id);
if (order != null) {
System.out.println("Customer:" + order.getCustomer().getName());
System.out.println("OrderNumber:" + order.getNumber());
}
transaction1.commit();
session.close();
}
多对一双向关联映射
多对一的双向关联其实是和多对一单向关联是相似的,我们只需要在一方(这里是指用户)对象中增加一个集合用来存储其订单
private Set<Order> orders = new HashSet<>();
再在用户对应的hbm.xml文件中对上述set集合进行配置
<set name="orders" cascade="save-update,delete" order-by="order_number asc" lazy="true">
<key column="customer_id"/>
<one-to-many class="com.jimisun.domain.Order"/>
</set>
本章总结
对象关系映射是Hibernate的核心,如何配置映射关系更是必会的技能,所以大家务必要掌握
从零打造在线网盘系统之Hibernate配置O/R映射的更多相关文章
- 从零打造在线网盘系统之Hibernate框架起步
欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...
- 从零打造在线网盘系统之Hibernate查询与更新技术
欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...
- 从零打造在线网盘系统之Struts2框架起步
欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...
- 从零打造在线网盘系统之Struts2框架配置全解析
欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...
- 从零打造在线网盘系统之Struts2框架核心功能全解析
欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...
- 从零打造在线网盘系统之SSH框架整合
欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...
- SSH教程从零打造在线网盘系统前言&目录
本系列教程内容提要 本系列教程是一个学习教程,是关于Java工程师的SSH(Struts2+Spring+Hibernate)系列教程,本教程将会分为四个部分和大家一同打造一个在线网盘系统,由于教程是 ...
- vue+nodejs+express+mysql 建立一个在线网盘程序
vue+nodejs+express+mysql 建立一个在线网盘程序 目录 vue+nodejs+express+mysql 建立一个在线网盘程序 第一章 开发环境准备 1.1 开发所用工具简介 1 ...
- Layui框架+PHP打造个人简易版网盘系统
网盘系统 大家应该都会注册过致命的一些网盘~如百度云.百科介绍:网盘,又称网络U盘.网络硬盘,是由互联网公司推出的在线存储服务,服务器机房为用户划分一定的磁盘空间,为用户免费或收费提供文件的存储. ...
随机推荐
- 关于用Spine制作骨骼动画的步骤
步骤: 1.打开spine. 2.新建一个空项目. 3.点右边Tree下的Images模块,导入在自己的切片素材和原整图. 4.把原整图拖到场景中,点右下角Color改变原图的颜色,方便后面对照. 5 ...
- 【转】WCF入门教程四[WCF的配置文件]
一.概述 配置也是WCF编程中的主要组成部分.在以往的.net应用程序中,我们会把DBConn和一些动态加载类及变量写在配置文件里.但WCF有所不同.他指定向客户端公开的服务,包括服务的地址.服务用于 ...
- imx6 i2c分析
本文主要分析: 1. i2c设备注册 2. i2c驱动注册 3. 上层调用过程参考: http://www.cnblogs.com/helloworldtoyou/p/5126618.html 1. ...
- 開始学习swift,资料汇总帖
最近開始学习swift,以后mac和ios开发就指望它,曾经学oc半途而废了.主要原因是oc等语法实在能适应,如今有swift了.语法有js,scala,python,c++,oc等语言的影子,又一次 ...
- Python的类和函数的魔法
class CustomClass: def customFun(self, id): print("fun_1",id ) if __name__ == '__main__': ...
- Graphviz 对网状结构进行可视化
Graphviz 是一款开源的,免费的图结构的可视化软件,只需要描述清楚图中的顶点,边的信息,Graphviz 可以自动化的对图进行布局,生成对应的图片: Graphviz 采用DOT 的这种语言来描 ...
- 【Graphlab】
https://dato.com/ graphlab
- mongodb select php操作 命令行操作
下面说一下,mongodb select的常用操作 测试数据 { "_id" : 1, "title" : "红楼梦", "aut ...
- Android学习笔记——Menu(三)
知识点 今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习. Popup Menu(弹出式菜单) 弹出式菜单是一种固定在View上的菜单模型.主要用于以下三种情况: 为特定的内容提 ...
- Oracle 11g 的bug?: aix 上,expdp 11.2.0.1 导出,impdp 11.2.0.3 导入,Interval 分区的 【Interval】 分区属性成了【N】
如题: Oracle 11g 的bug?: aix 上,expdp 11.2.0.1 导出,impdp 11.2.0.3 导入,Interval 分区的 [Interval] 分区属性成了[N] 谨记 ...