iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Hibernate中怎么实现多对一和一对多操作
  • 288
分享到

Hibernate中怎么实现多对一和一对多操作

2023-06-17 15:06:41 288人浏览 薄情痞子
摘要

这期内容当中小编将会给大家带来有关Hibernate中怎么实现多对一和一对多操作,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、多对一和一对多概念其实这个概念上来说很简单,比如一个客户可以有多个订单,多

这期内容当中小编将会给大家带来有关Hibernate中怎么实现多对一和一对多操作,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

1、多对一和一对多概念

其实这个概念上来说很简单,比如一个客户可以有多个订单,多个订单属于同一个客户。就是最基本的一对多,和多对一。数据库使用中,感觉多对一和一对多算是比较常见的逻辑关系了。

我曾经做过一些数据库,比如某些政府部门的,其表单很设计的很简单粗糙,甚至连主键都没有,完全靠在事务层补全这些关系。其实通过Hibernate持久层来实现逻辑关系也是很不错的方法。下面的例子,就是数据库逻辑上基本没有定义,主要放在持久层里面。这个也主要是我对数据库操作属于半通水的原因。

2、数据库层

这里面有两个表单,一个CUSTOMER,客户表单,一个是ORDERS,订单表单。生成客户表单,这个是在sqlServer里面做的,其实其他都一样,因为逻辑关系在Hibernate上面,id是主键非空,其他可以为空:

CREATETABLE[dbo].[CUSTOMER](  [id][numeric](18,0)NOTNULL,  [name][varchar](50)NULL,  [age][int]NULL,  CONSTRaiNT[PK_CUSTOMER]PRIMARYKEY)

订单表单

id为主键非空,CUSTOMER_id是对应客户主键,也非空,这里不做外键设置。

CREATETABLE[dbo].[ORDERS](  [id][numeric](18,0)NULLPRIMARYKEY,  [CUSTOMER_id][numeric](18,0)NOTNULL,  [ORDER_NUMBER][varchar](50)NULL,  [PRICE][numeric](18,3)NULL  )

3、Hibernate设定

HIbernate里面,一对多的对象体现,是客户有一个集合set,set里面放着对应订单,而多对一体现,是订单里面有一个CUSTOMER对象,表明该订单所属的客户。其中,CUSTOMER类为:

publicclassCustomerimplementsjava.io.Serializable{  privateLongid;  privateStringname;  privateIntegerage;  privateSetrderses=newHashSet();   }

后面的getXXX和setXXX方法就省去了,同样订单类就是:

publicclassOrdersimplementsjava.io.Serializable{  privateLongid;  privateCustomercustomer;  privateStrinGorderNumber;  privateDoubleprice;   }

而对应hbm文档,就是map文档如下:

CUSTOMER.hbm.xml  <!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"  "Http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!--  MappingfileautogeneratedbyMyEclipsePersistenceTools  --> <hibernate-mapping> <classnameclassname="onetomany.Customer"table="CUSTOMER"schema="dbo"catalog="DBTEST"> <idnameidname="id"type="java.lang.Long"> <columnnamecolumnname="id"precision="18"scale="0"/> <generatorclassgeneratorclass="increment"/> </id> <propertynamepropertyname="name"type="java.lang.String"> <columnnamecolumnname="name"length="50"/> </property> <propertynamepropertyname="age"type="java.lang.Integer"> <columnnamecolumnname="age"/> </property> <setnamesetname="orderses"inverse="true"lazy="true"cascade="all"> <key> <columnnamecolumnname="CUSTOMER_id"precision="18"scale="0"not-null="true"/> </key> <one-to-manyclassone-to-manyclass="onetomany.Orders"/> </set> </class> </hibernate-mapping>


这个里面,其他都很简答了,其中<generatorclass="increment"/>表示主键值自动增加,这个主要针对字符串对应的,主要体现多对以的是:

<setnamesetname="orderses"inverse="true"lazy="true"cascade="all"> <key> <columnnamecolumnname="CUSTOMER_id"precision="18"scale="0"not-null="true"/> </key> <one-to-manyclassone-to-manyclass="onetomany.Orders"/> </set>

其中,set表示,对应集合;fetch和lazy主要是用来级联查询的,而cascade和inverse主要是用来级联插入和修改的,这几个主要包括对集合的控制。<one-to-manyclass="onetomany.Orders"/>表示对应类,即set里面包含的类,而key主要是用于确定set里面对应表单列。

ORDERS的hbm  <?xmlversionxmlversion="1.0"encoding="utf-8"?> <!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!--  MappingfileautogeneratedbyMyEclipsePersistenceTools  --> <hibernate-mapping> <classcataloGClasscatalog="DBTEST"name="onetomany.Orders"schema="dbo"table="ORDERS"> <idnameidname="id"type="java.lang.Long"> <columnnamecolumnname="id"precision="18"scale="0"/> <generatorclassgeneratorclass="increment"/> </id> <many-to-oneclaSSMany-to-oneclass="onetomany.Customer"fetch="select"name="customer"> <columnnamecolumnname="CUSTOMER_id"precision="18"scale="0"/> </many-to-one> <propertygeneratedpropertygenerated="never"lazy="false"name="orderNumber"type="java.lang.String"> <columnlengthcolumnlength="50"name="ORDER_NUMBER"/> </property> <propertygeneratedpropertygenerated="never"lazy="false"name="price"type="java.lang.Double"> <columnnamecolumnname="PRICE"precision="18"scale="3"/> </property> </class> </hibernate-mapping> <many-to-oneclassmany-to-oneclass="onetomany.Customer"fetch="select"name="customer"> <columnnamecolumnname="CUSTOMER_id"precision="18"scale="0"/> </many-to-one>

表示CUSTOMER熟悉对应的类,和其作为key的列名,上面这些都可以在MyEclipse里面自动生成。另外注意的一点是,在生成的DAO里面,涉及表单操作的save()和delete()方法,必须要事件提交,数据库才有反映。可以就该Hibernate.xml,或者用下面这样代码来实现:

Sessionse=getSession();  Transactiontx=se.beginTransaction();  se.delete(persistentInstance);  //se.save(instance);  tx.commit();

4、验证效果

新增用户

如果新增一个用户,该用户里面包含有两个表单,那么,由于持久层已经实现了逻辑关系,只要用户类里面的set包含了表单,则表单可以自动增加。实现代码:

CustomerDAOcd=newCustomerDAO();  Customerxd=newCustomer("王小虎",20,null);  Ordersord1=neWorders();  ord1.setCustomer(xd);  ord1.setOrderNumber("王小虎的买单1");  Ordersord2=newOrders();  ord2.setCustomer(xd);  ord2.setOrderNumber("王小虎的买单2");  Setrderses=newHashSet();  orderses.add(ord1);  orderses.add(ord2);  xd.setOrderses(orderses);  cd.save(xd);

代码里面,加入一个王小虎用户。两个订单,通过setOrderses加入,只使用cd.save这一个对持久层操作。完成后查询:

王小虎  =================================  王小虎的买单1  王小虎的买单2

显示,CUSTOMER里面加入了王小虎,ORDERS里面也加入他的订单。

删除操作

List<Customer>csList=cd.findByProperty("name","王小虎");  for(Customercs:csList){  cd.delete(cs);  }

上述就是小编为大家分享的Hibernate中怎么实现多对一和一对多操作了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: Hibernate中怎么实现多对一和一对多操作

本文链接: https://www.lsjlt.com/news/290166.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Hibernate中怎么实现多对一和一对多操作
    这期内容当中小编将会给大家带来有关Hibernate中怎么实现多对一和一对多操作,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、多对一和一对多概念其实这个概念上来说很简单,比如一个客户可以有多个订单,多...
    99+
    2023-06-17
  • Hibernate一对多怎么实现
    本篇内容主要讲解“Hibernate一对多怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate一对多怎么实现”吧!先看由满江红翻译团队(RedSaga Translate T...
    99+
    2023-06-17
  • Hibernate的一对一,一对多/多对一关联保存的实现
    目录一对一关联保存:留言表实体类配置:(主表)留言内容表配置:(从表)留言表hbm.xml配置:(主表)留言内容表hbm.xml配置:(从表)一对多/多对一保存活动表实体类配置:(主...
    99+
    2024-04-02
  • Hibernate多对多怎么实现
    本篇内容主要讲解“Hibernate多对多怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate多对多怎么实现”吧!假設現在有User與Server兩個類別,一個User可以被...
    99+
    2023-06-03
  • MyBatis中怎么实现一对多查询和多对一查询
    这篇“MyBatis中怎么实现一对多查询和多对一查询”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MyBatis中怎么实现一...
    99+
    2023-06-29
  • Hibernate一对多数据关联怎么实现
    本篇内容主要讲解“Hibernate一对多数据关联怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate一对多数据关联怎么实现”吧!数据模型表定义sqluse sam...
    99+
    2023-06-17
  • Java Hibernate中一对多和多对多关系的映射方式
    目录Hibernate的一对多和多对多Hibernate的一对多Hibernate的一对多配置Hibernate的一对多操作Hibernate的多对多Hibernate的多对多配置H...
    99+
    2023-05-18
    Java Hibernate一对多 Java Hibernate多对多
  • 利用Hibernate怎么实现一个多对一单项关联
    这期内容当中小编将会给大家带来有关利用Hibernate怎么实现一个多对一单项关联,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。概念      ...
    99+
    2023-05-31
    hibernate te
  • Mybatis怎么实现一对一、一对多关联查询
    今天小编给大家分享一下Mybatis怎么实现一对一、一对多关联查询的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Mybati...
    99+
    2023-07-05
  • MyBatis如何实现多表查询(多对一、一对多)
    MyBatis实现多表查询  一、多对一查询 数据库的准备 创建两张表,一张老师表,一张学生表 将老师主键id关联学生外键tid 创建sql的语句 create ta...
    99+
    2024-04-02
  • Spring Boot 整合JPA 数据模型关联使用操作(一对一、一对多、多对多)
    目录表关联一对一一对多和多对一多对多表关联 上一篇介绍了JPA的简单使用,这一篇介绍JPA在表关联上的使用 一对一 配置参数JPA对于数据实体一对一映射使用的是@OneToOne注解...
    99+
    2024-04-02
  • SpringBoot中Mybatis注解一对多和多对多查询实现示例
    目录一、模拟的业务查询二、对应的实体类如下三、对应的建表语句和模拟数据如下四、@One一对一映射五、@Many一对多查询六、@One @Many的总结一、模拟的业务查询 系统中的用户...
    99+
    2024-04-02
  • Hibernate一对多数据关联是什么
    本篇内容主要讲解“Hibernate一对多数据关联是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate一对多数据关联是什么”吧!Hibernate一对多数据关联。指的是单向一对...
    99+
    2023-06-17
  • mybatis怎么实现一对多映射
    这篇文章主要讲解了“mybatis怎么实现一对多映射”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mybatis怎么实现一对多映射”吧!mybatis 一对多映射 column属性注意事项昨...
    99+
    2023-06-26
  • MyBatis中多对一和一对多数据的处理方法
    目录多对一的处理1、数据库设计2、搭建测试环境3、按查询嵌套处理4 、按结果嵌套处理一对多的处理1、实体类编写2、按结果嵌套处理3、按查询嵌套处理4、小结多对一的处理 多对一的理解:...
    99+
    2023-01-03
    MyBatis多对一 MyBatis一对多处理
  • MySQL如何创建多对多和一对一关系
    这篇文章主要介绍“MySQL如何创建多对多和一对一关系”,在日常操作中,相信很多人在MySQL如何创建多对多和一对一关系问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL如何创建多对多和一对一关系”的疑...
    99+
    2023-06-29
  • MySQL创建多对多和一对一关系方法
    目录一、创建多对多1.学生表2.课程表3.中间表4.插入数据5.查询学生1选了哪些科目6.查询id=2数学被谁选了 二、MySQL 创建一对一关系1.一对一2.插入数据一、...
    99+
    2024-04-02
  • Mybatis一对多和多对一处理的深入讲解
    目录建表 多对一处理 mapper实体类按照查询嵌套处理按照结果嵌套处理回顾Mysql多对一查询方式一对多处理mapper实体类按照查询嵌套处理按照查询嵌套处理结果映射面试高频点总结...
    99+
    2024-04-02
  • Mybatis使用@one和@Many实现一对一及一对多关联查询
    目录一、准备工作1.创建springboot项目,项目结构如下2.添加pom.xml配置信息3.配置相关信息二、使用@One注解实现一对一关联查询三、使用@Many注解实现一对多关联...
    99+
    2024-04-02
  • Hibernate映射一对多关联关系是什么
    这篇文章主要讲解了“Hibernate映射一对多关联关系是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate映射一对多关联关系是什么”吧!在域模型中,类和类之间最普通的关系...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作