广告
返回顶部
首页 > 资讯 > 精选 >Hibernate的集合映射是什么
  • 754
分享到

Hibernate的集合映射是什么

2023-06-17 11:06:07 754人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关Hibernate的集合映射是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。POJOs如下:Customer类---->customer表Order类对应---

这期内容当中小编将会给大家带来有关Hibernate的集合映射是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

POJOs如下:

Customer类---->customer表

Order类对应---->orders表

customer(1)<----->(n)order

public class Customer  {      private String id;      private String username;      private String passWord;      private Timestamp reGISterTime;      private int age;      private Set<Order> orders = new HashSet<Order>();        }
public class Order  {      private String id;      private String orderNumber;      private int balance;      private Customer customer;        }

Set集合映射:

Hibernate为集合映射提供了专用的标签元素,Set集合映射,就使用<set>标签表示:

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"      "Http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">           <hibernate-mapping>         <class name="com.suxiaolei.hibernate.pojos.Customer" table="customer">             <!-- 主键设置 -->             <id name="id" type="string">                 <column name="id"></column>                 <generator class="uuid"></generator>             </id>                           <!-- 属性设置 -->             <property name="username" column="username" type="string"></property>             <property name="password" column="password" type="string"></property>             <property name="age" column="age" type="integer"></property>             <property name="registerTime" column="register_time" type="timestamp"></property>                           <set name="orders" inverse="true" cascade="all">                 <key column="customer_id"></key>                 <one-to-many class="com.suxiaolei.hibernate.pojos.Order"/>             </set>                   </class>     </hibernate-mapping>

<set>标签中的"name"属性表示customer对象中关系集合的属性名,"inverse"与"cascade"属性说明(参考这里)。在数据库中表示"一对多"的关系是通过外键关联的方式实现的,"多方"通过持有"一方"的主键值来确定关系,怎么持有"一方"的主键值?"多方"将使用一列来存储"一方"的主键值,然后将此列作为外键列参照"一方"的主键列。所以使用Hibernate开发时需要将两表的关系列(外键列)告诉Hibernate,<key column="customer_id"></key>就是完成这个工作的,Hibernate就能根据 "customer_id"列取出关联信息。例如:从customer表中取出一条记录后,Hibernate会根据该customer记录的主键值再从order表中查找"custom_id"列,取出值相等的记录,然后组装到Customer对象中的set集合属性中,反之亦然。因为取出来的记录(只是一些零碎的值,还没有组装成对象)需要存放到Set集合中,所以要告诉Hibernate在Set集合里面能放什么类型的数据。<one-to-many>这个标签就是完成这个工作的,"class"属性是指定这个这个Set集合里面元素的类型。

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">           <hibernate-mapping>         <class name="com.suxiaolei.hibernate.pojos.Order" table="orders">             <id name="id" type="string">                 <column name="id"></column>                 <generator class="uuid"></generator>             </id>                           <property name="orderNumber" column="orderNumber" type="string"></property>             <property name="balance" column="balance" type="integer"></property>                           <many-to-one name="customer" class="com.suxiaolei.hibernate.pojos.Customer">                 <column name="customer_id"></column>             </many-to-one>                  </class>     </hibernate-mapping>

<many-to-one>标签是设置"一对多"关系中的"多方"的,name指定了哪一个属性是关系属性,"class"指定了关系属性的类型(也指定了与哪一个表关联), "column"属性是指定这个关联属性是按照"customer_id"列的值,在customer表中查询获得的。

测试

tx = session.beginTransaction();    Customer customer = new Customer();  customer.setUsername("zhangsan");  customer.setPassword("123456");  customer.setAge(22);  customer.setRegisterTime(new Timestamp(new Date().getTime()));    Order order1 = new Order();  order1.setOrderNumber("a1a2a3");  order1.setBalance(1000);  order1.setCustomer(customer);    Order order2 = new Order();  order2.setOrderNumber("d3D2d1");  order2.setBalance(670);  order2.setCustomer(customer);   customer.getOrders().add(order1);  customer.getOrders().add(order2);   session.saveOrUpdate(customer);   tx.commit();

查看数据库的数据:

customer表:

Hibernate的集合映射是什么

orders表

Hibernate的集合映射是什么

可以看到数据被成功的插入到数据库中了,并且"custom_id"列(关系列)也正确赋值了。

List映射:

Hibernate为集合映射提供了专用的标签元素,List集合映射,就使用<list>标签表示:

<list name="orders" inverse="false" cascade="all">     <key column="customer_id"></key>     <index column="customer_index" type="integer"></index>     <one-to-many class="com.suxiaolei.hibernate.pojos.Order"/> </list>

List集合是有顺序的,"index"标签,是用于记录顺序,List的顺序将表现在"customer_index"列上,其余设置,与Set集合类似。注意:List映射中"inverse"中的值不能设置为"true",因为List集合的顺序只有customer方知道,order方不知道List的存在。不然,"customer_index"的列值将不会被赋值。

查看数据库:

customer表:

Hibernate的集合映射是什么

orders表:

Hibernate的集合映射是什么

可以看到记录正确的插入到数据库中了,而且"custom_index"正确的表示出List的顺序。

Array(数组)映射:标签使用<array>其他与List基本一致。

Map映射:

Hibernate为集合映射提供了专用的标签元素,Map集合映射,就使用<map>标签表示:

<map name="orders" inverse="false" cascade="all">     <key column="customer_id"></key>     <index column="order_key" type="string"></index>     <one-to-many class="com.suxiaolei.hibernate.pojos.Order"/> </map>

Map映射中<index>标签,表示Map集合中的key值,记录在"order_key"列中,<one-to-many>表示Map集合中的vlaue。其他设置与上面一样。注意:"inverse"不要设置成"true"因为key值是customer对象维护的,而order不知道key的存在。

Bag映射:它是List与Set集合的结合,可以重复,但是无顺。使用List模拟Bag。设置类似Set,它也有专用标签<bag>。

总  结

在没有特殊要求下,***使用Set集合,因为Set集合没有特殊信息需要"一方"自己维护,可以完全交给"多方"维护,能够提高性能,若需要记录数据的顺序可以使用List和Array映射,若需要key/value形式存储数据,可以使用Map映射。***一点若集合放置的数据简单类型(原生类型、原生类型的包装类、String、Date之类的)在集合映射配置上稍有不同,<element>元素可以直接映射这些简单类型,其他配置与上述配置没什么不同。

上述就是小编为大家分享的Hibernate的集合映射是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: Hibernate的集合映射是什么

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

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

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

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

下载Word文档
猜你喜欢
  • Hibernate的集合映射是什么
    这期内容当中小编将会给大家带来有关Hibernate的集合映射是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。POJOs如下:Customer类---->customer表Order类对应---...
    99+
    2023-06-17
  • Hibernate高级集合映射是什么
    本篇内容主要讲解“Hibernate高级集合映射是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate高级集合映射是什么”吧!Hibernate高级集合映射主要分为有序集合、双向...
    99+
    2023-06-17
  • Hibernate映射关联是什么
    这篇文章主要讲解了“Hibernate映射关联是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate映射关联是什么”吧!Hibernate映射关联关系和我们现实世界里事物的关...
    99+
    2023-06-17
  • Hibernate继承关系树的映射方式是什么
    这篇文章主要介绍“Hibernate继承关系树的映射方式是什么”,在日常操作中,相信很多人在Hibernate继承关系树的映射方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate继承关系...
    99+
    2023-06-17
  • Hibernate映射一对多关联关系是什么
    这篇文章主要讲解了“Hibernate映射一对多关联关系是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate映射一对多关联关系是什么”吧!在域模型中,类和类之间最普通的关系...
    99+
    2023-06-17
  • Hibernate映像文件是什么
    这篇文章主要讲解了“Hibernate映像文件是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate映像文件是什么”吧!Hibernate映像文件实例们已经从改用这样的纯净的...
    99+
    2023-06-17
  • java什么是映射
    集是一个集合,它可以快速地查找现有的元素。但是,要查看一个元素,需要有要查找元素的精确副本。这不是一种非常通用的查找方式,因为在集合中查找元素总是要遍历集合。通常,我们知道某些键的信息,并想要查找与之对应的元素。映射(map)数据结构就是为...
    99+
    2022-02-23
    java入门 java 映射
  • springmvc url处理映射的三种方式集合
    目录一、SpringMVC简介二、工作流程与介绍三、代码截图以下组件通常使用框架提供实现:1、DispatcherServlet:前端控制器2、HandlerMapping:处理器映射器3、Handler:处理器4、HandlAdapter...
    99+
    2019-01-04
    springmvc映射 url处理映射
  • java映射的概念是什么
    在Java中,映射(Map)是一种数据结构,用于存储键值对(key-value pairs)的集合。每个键(key)都是唯一的,而值...
    99+
    2023-08-23
    java
  • Linux内存映射指的是什么
    Linux内存映射指的是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 内存映射就是用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修...
    99+
    2023-06-28
  • spring整合hibernate的方法是什么
    Spring整合Hibernate的方法有以下几种:1. 使用Spring的HibernateTemplate:Spring提供了H...
    99+
    2023-08-12
    spring hibernate
  • 什么是虚拟映射和mmap()
    这篇文章给大家介绍什么是虚拟映射和mmap(),内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。虚存映射我们知道,程序是存储在磁盘上到静态文件;进程是对程序到一次运行过程。在进程开始运行时,进程的代码和数据等内容必须装入到...
    99+
    2023-06-16
  • ps渐变映射的作用是什么
    这篇文章主要讲解了“ps渐变映射的作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ps渐变映射的作用是什么”吧!ps渐变映射的作用:一、渐变映射的使用原理 利用 PS渐变映射工具,先...
    99+
    2023-07-04
  • Linux端口映射的方法是什么
    这篇文章主要介绍“Linux端口映射的方法是什么”,在日常操作中,相信很多人在Linux端口映射的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux端口映射的方法是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-28
  • mybatis中mapper映射的方法是什么
    在MyBatis中,Mapper映射的方法是通过SQL语句来操作数据库。Mapper映射文件中定义了一系列的SQL语句,这些SQL语...
    99+
    2023-09-16
    mybatis
  • Sourcemap源代码映射的方法是什么
    今天小编给大家分享一下Sourcemap源代码映射的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Sourcema...
    99+
    2023-07-05
  • Linux主机名映射的方法是什么
    这篇文章主要讲解了“Linux主机名映射的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux主机名映射的方法是什么”吧!1. 查看主机名: hostname&nbs...
    99+
    2023-06-28
  • 云服务器内网映射是什么
    云服务器内网映射指的是将本地内网IP映射到云服务器的IP地址或公网IP地址范围内,从而实现跨云计算平台的访问。通常,云服务器通过内部的IP来映射用户访问,而云服务器本身也将访问地址映射到内部的IP,以便在云服务器的本地内网范围内实现用户的功...
    99+
    2023-10-26
    内网 服务器
  • 云服务器映射端口是什么
    云服务器的映射端口通常指云服务器提供商为客户端提供的网络接口,用于连接到其服务器以获得网络资源。您可以查看云服务器提供商的网站,以确定他们是否提供此类映射端口。 一般来说,在云服务器上使用的网络接口是动态主机配置协议(DHCP)。在DHC...
    99+
    2023-10-26
    端口 服务器
  • 云服务器端口映射是什么
    端口映射就是将外网主机IP地址的端口映射到内网主机,提供相应的服务。当用户访问该IP的端口时,服务器自动将请求映射到对应局域网内部的主机上。映射端口有两个含义:同端口映射,指通过端口转换来获取公网ip地址的端口。指端口映射出来的端口,就是把...
    99+
    2022-10-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作