从零打造在线网盘系统之Hibernate配置O/R映射

欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重地阐述SSH三个框架的基础知识,第四部分将会进入项目实战,如果您已经对SSH框架有所掌握,那么可以直接浏览第四章,源码均提供在GitHub/ssh-network-hard-disk上供大家参阅

本篇学习要求

  1. 主键映射
  2. 普通属性映射
  3. 组件映射
  4. 一对一关联映射
  5. 多对一单向关联映射
  6. 多对一双向关联映射

主键映射

注解配置

    @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的核心,如何配置映射关系更是必会的技能,所以大家务必要掌握

原文地址:https://www.cnblogs.com/jimisun/p/9942068.html

时间: 2024-08-02 23:35:08

从零打造在线网盘系统之Hibernate配置O/R映射的相关文章

从零打造在线网盘系统之Hibernate查询与更新技术

欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重地阐述SSH三个框架的基础知识,第四部分将会进入项目实战,如果您已经对SSH框架有所掌握,那么可以直接浏览第四章,源码均提供在GitHub/ssh-network-hard-disk上供大家参阅 本章学习目标 掌握标准查询API的使用 掌握QBE 掌握HQL 掌握SQL 本篇前言 在前面两篇文章中我

从零打造在线网盘系统之Struts2框架起步

欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重地阐述SSH三个框架的基础知识,第四部分将会进入项目实战,如果您已经对SSH框架有所掌握,那么可以直接浏览第四章,源码均提供在GitHub/ssh-network-hard-disk上供大家参阅 本篇目标 掌握Struts2工作流程 掌握Struts2控制器 掌握Struts2XML配置 掌握Str

从零打造在线网盘系统之Struts2框架配置全解析

欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重地阐述SSH三个框架的基础知识,第四部分将会进入项目实战,如果您已经对SSH框架有所掌握,那么可以直接浏览第四章,源码均提供在GitHub/ssh-network-hard-disk上供大家参阅 要想学好一个框架,就必须要学好如何配置好这个框架,下面让我们大体上来一起来了解一下Struts2的相关配

vue+nodejs+express+mysql 建立一个在线网盘程序

vue+nodejs+express+mysql 建立一个在线网盘程序 目录 vue+nodejs+express+mysql 建立一个在线网盘程序 第一章 开发环境准备 1.1 开发所用工具简介 1.2 安装 MySQL 1.2.1 下载安装 MySQL 1.2.2 可能出现的问题和解决方案 1.3 安装 vue-cli 1.4 安装 express 第二章 数据库设计和创建 2.1 数据库和表设计 2.2 user 表 2.3 file 表 2.4 创建数据库和表所用 sql 语句参考 第三

打造百度网盘备份利器:自动备份Linux VPS文件和多线程下载百度网盘资源

前一段时间国内的各大网盘百度云盘,金山快盘,360云盘,华为网盘为争夺用户上演空间容量博弈,网盘商们还固执地以为中国的网民都不懂网络技术,可以像某公司那样用一些数字的手段来忽悠用户,参与到网盘商的数字游戏中的公司都心知肚明. 在不需要增加任何网盘上传下载带宽和硬件设备投入的情况下,又可以用TB级别网盘这样的字眼来夺人眼球,在网络上大肆炒作一番,这比用钱买广告来推广网盘有效得多了.在这场网盘炒作中,率先“挑起事非”的两家百度网盘和360网盘获利最多. 尤其是百度网盘,应该算正式成长为国内网盘界中老

project02 U盘系统与排错系统

U盘系统与排错系统 制作U盘系统的两个主要目的: 1.以U盘为救援系统来修复有故障无法启动操作系统 修复步骤: 1)选尝试从单用户模式启动(内核和基本服务,可以参考/etc/rc.d/rc1.d/S..) 2)如果单用户模式也无法正常启动,可以考虑从光盘或者是U盘启一个linux操作系统,首选使用U盘 2.通过U盘系统的制作让你更了解一个主机上linux系统组成,以及启动流程 LINUX操作系统的组成: 内核 SHELL 应用程序 文件系统 内核 核心文件    vmlinuz 临时根文件  i

电子政务私有云盘系统建设必备-Mobox政务盘

序言 这几年,智慧政务已经成为了政府行业IT建设发展的重要进程.传统办公方式信息传递速度慢.共享程度低.查询利用难,早已成为政府机关获取和利用信息的严重制约因素.建立文档分享共用机制,加强数据整合,避免信息孤岛完成信息系统互联互通.信息共享和业务协同已经成为智慧政务私有云盘系统建设的重要任务. 结合硬件性能提升.云计算.大数据.移动.社交的发展趋势,政府行业在建设智慧政务私有云盘系统的进程中存在以下问题: 存在大量的非结构化数据 随着政府行业新业务不断上线,例如:数字化法庭系统.头像识别系统.社

清理C盘系统垃圾文件-批处理方式

很多时候安装软件越来越多,部分软件产生的临时文件.垃圾文件常常存在于C盘系统盘中:日积夜累直接导致可用的系统盘空间越来越小,直到没有多余的空间为止, 最后可能的结果是系统异常.软件无法正常运行:此时可以通过其他第三方软件工具或杀毒.安全卫士之类的清理比较全面或者重新安装操作系统,不过这样也会非常麻烦, 此后还需要安装各种必要的软件.配置之类的:有时候为了方便不用安装其他软件即可清理,通过以下批处理clear.bat,可以较为方便的清理大部分垃圾或临时缓存文件, 批处理内容如下: echo "正在

hadoop2.4.1+hbase0.98.3实现的分布式网盘系统初步

直接上图片 web端用spring mvc4.0.5 hadoop+hbase 伪分布实验环境 已实现用户注册 登陆 网盘管理:上传文件 创建文件夹 修改文件及文件夹 分享文件及文件夹 删除文件及文件夹 仿百度文库浏览文档 和下载文件功能. 关注用户管理: 关注和取消关注用户 文件分享:分享列表查看 hadoop2.4.1+hbase0.98.3实现的分布式网盘系统初步,布布扣,bubuko.com