Hibernate入门12 - List 映射

Hibernate中List集合映射详解与实战配置 简介:在Java持久化框架Hibernate中,List集合映射是一种重要的对象关系映射(ORM)技术,用于将数据库表中的一组关联记录映射到Java对象的List属性中。通过XML或注解方式配置List映射,可实现一对多或多对多关系的数据管理,并支持索引顺序、双向关联和级联操作。本文详细介绍了List集合映射的基础概念、配置方法(包括。 阅读详情

入门 12 - List 映射

 这边介绍如果对象中包括List型态的属性时如何进行映像,首先我们假设我们要制作一个在线档案管理,使用者上载的文件名称可能是重复的、具有相同名称,之前使用的Set不允许有重复的内容,所以这次我们改用List,我们的User类别撰写如下:

User.java

package onlyfun.caterpillar;

 

import java.util.*;

 

public class User {

    private long id;

    private String name;

    private List files = new ArrayList();

  

    public List getFiles() {

        return files;

    }

    public void setFiles(List files) {

        this.files = files;

    }

   public long getId() {

        return id;

    }

   public void setId(long id) {

        this.id = id;

   }

   public String getName() {

        return name;

   }

   public void setName(String name) {

        this.name = name;

   }

    public void addFiles(String name) {

        files.add(name);

    }

    public void addFiles(int i, String name) {

        files.add(i, name);  

    }

}


 我们在程序中使用的是ArrayList,要在Hibernate中将之映像至数据库,基本上与映像Set相同,我们使用<list>标签 替代<set>,而由于List中储存的对象是具有索引值的,所以我们必须额外增加一个字段来记录对象在List中的位置,这我们可以使用 <index>标签来指定,我们的映射文件撰写如下:

User.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping

    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

 

<hibernate-mapping>

 

    <class name="onlyfun.caterpillar.User" table="USER">

 

        <id name="id" type="long" unsaved-value="null">

            <column name="USER_ID"/>

            <generator class="increment"/>

        </id>

 

        <property name="name" type="string" not-null="true">

            <column name="NAME" length="16" not-null="true"/>

        </property>

      

        <list name="files" table="FILES">

            <key column="USER_ID"/>

            <index column="POSITION"/>

            <element type="string" column="FILENAME" not-null="true"/>

        </list>

    </class>

 

</hibernate-mapping>


 与Set类似的是,记录List的FILES表格中,使用与USER表格相同的USER_ID值,我们来看看数据储存至数据表中是如何,假设我们的程序以下面的方式储存数据:

User user1 = new User();

        user1.setName("caterpillar");

        user1.addFiles("hibernate2.jar");

        user1.addFiles("jtx.jar");

      

        User user2 = new User();

        user2.setName("momor");

        user2.addFiles("fan.jpg");

        user2.addFiles("fan.jpg");

        user2.addFiles("bush.jpg");

      

        Session session = sessionFactory.openSession();

        Transaction tx= session.beginTransaction();

        session.save(user1);

        session.save(user2);

        tx.commit();

        session.close();


 那么在数据库中的USER与FILES表格将储存以下的内容:

mysql> select * from user;

+---------+-------------+

| USER_ID | NAME        |

+---------+-------------+

|       1 | caterpillar |

|       2 | momor       |

+---------+-------------+

2 rows in set (0.00 sec)

 

mysql> select * from files;

+---------+----------------+----------+

| USER_ID | FILENAME       | POSITION |

+---------+----------------+----------+

|       1 | hibernate2.jar |        0 |

|       1 | jtx.jar        |        1 |

|       2 | fan.jpg        |        0 |

|       2 | fan.jpg        |        1 |

|       2 | bush.jpg       |        2 |

+---------+----------------+----------+

5 rows in set (0.00 sec)

如何使用Qt的PIMPL习惯用法(PIMPL Idiom PIMPL是指“Pointer to IMPLementation”(指向实现的指针),意味着将实现细节隐藏起来,用户类无需关注这些实现细节。在Qt中常用PIMPL习惯用法来清晰地区分接口与实现,尽管Qt官方文档并未详细说明该机制。本文将演示如何在Qt中使用PIMPL习惯用法,并以一个简单的坐标输入对话框作为实例。 阅读详情

相关推荐

Allan方差读图分析IMU误差指标

Allan方差标定IMU参数实测分析

weixin_44927558的博客 3565

Hibernate映射List

Hibernate映射List,其中List中的元素可以是String、Long、Date等可以直接映射到字段上的java类型,较为复杂的就是List中的元素的类型为我们自定义的类型。 以Team类为例: (1)映射的List中的元素为我们自定义的Student类型: 持久化类Team: package bean; import java.util.List; public cla

jialinqiang的专栏 1万+

OpenClaw与Ollama本地AI部署指南

AI模型本地化部署是当前企业数字化转型的关键技术,通过开源框架Ollama可以在消费级硬件上运行大语言模型。本文以OpenClaw多智能体系统为例,详解从环境配置到模型优化的全流程实践,特别针对国内开发者遇到的网络问题提供了镜像加速等解决方案。这种私有化部署方案尤其适合金融数据分析、企业知识管理等对数据安全要求高的场景,通过模块化设计实现多智能体协作,同时保持对NVIDIA显卡和普通CPU的兼容性。

weixin_34302561的博客 396

Hibernate(八)List映射

一、 set:不允许重复、无序(前面已多次使用) list:有序、重复 map:key-value对形式 二、map与set标签中的element子标签映射的是原子类型(string、data、int、long…),即就是能够直接映射到数据库表字段上的类型,而one-to-many等映射的则是实体类型,指的是无法映射到表的某个字段,而是要映射到整张表的类型。 三、list映射 User类 pack...

Waylon的博客 6241

自动驾驶感知融合算法拆解:从华为MDC案例看前融合与大融合的工程实现

本文深度解析了华为MDC平台在自动驾驶感知融合算法中的前沿工程实践,重点探讨了Camera-Lidar前融合与多传感器大融合的架构设计。通过异构融合架构、数据流优化和场景化应用,华为MDC平台实现了高效、安全的感知能力,显著提升了自动驾驶系统的性能与可靠性。

weixin_29198045的博客 533

无刷直流电机计算转速

一个霍尔传感器周期(Tms)有两种模式输出方式(3FG/1FG),一个电周期是6个60°电角度,电机磁极数是P,磁极对数PP = P / 2 3FG模式: 1个电周期= 6 * T 1FG模式: 1个电周期= 2 * T 1秒钟电周期个数: 1分钟电周期个数: 1分钟转速: 举例: 假设电机磁极数是8,3FG模式下,霍尔周期700us,计算该条件下转速 ...

meimiaorenshengqq的博客 9670

Hibernate集合映射之List

使用List和Map有很多共性,比如说不能再1方设置inverse="true"不同的是,list可以保留元素的顺序,这个使通过一个idx字段来实现的,比如说Team和Student的1对多关系,我们给team加入学生的时候,需要记录加入的顺序,这时候我们可以使用list方式,并在student表中新增加一个idx字段(但在Student实体类中不定义idx属性) 数据库结构: 

我的世界我的梦 3748

AstrBot插件开发全攻略:从零编写一个天气查询插件(Python实战)

本文提供了一份详细的AstrBot插件开发实战指南,手把手教你使用Python从零编写一个智能天气查询插件。内容涵盖插件系统核心设计、开发环境搭建、API调用与数据处理、自然语言交互实现以及插件打包发布全流程,帮助你快速掌握基于AstrBot框架的聊天机器人功能扩展技能。

weixin_29212867的博客 1081

Hibernate学习笔记:集合映射之映射List

List与前面用过的Set不同之处是List是有序的,所以在用List作影射的时候, 需要维护一个顺序信息。给images1表加一个字段image_index, 用来标示同一个Product的图片的排列顺序:alter table images1 add image_index int。填上测试数据.映射值类型假如Product的images里面只需要放image_file, 则修改一下P

sunxing007的专栏 1551

【ISP图像处理】Demosaic去马赛克技术演进与边缘优化策略

本文深入解析了ISP图像处理中的Demosaic(去马赛克)技术。从Bayer阵列原理出发,梳理了从双线性插值、Hamilton-Adams边缘导向算法到利用通道相关性与自相似性的技术演进历程,并重点探讨了针对边缘与纹理伪影的优化策略,为工程实践中的算法选型与硬件协同设计提供了专业指导。

weixin_29091445的博客 386

歪枣网股票数据下载接口汇总一

歪枣网上下载接口动态信息如下: 接口名称:A股列表,接口描述:沪深京A股基本信息,接口地址:/doc/getStockHSABaseInfo?code=all&fields=code,name,stype,hsgt,bk,roe,zgb,ltgb&export=0&token= 请求参数描述: 参数名:code,参数描述:股票代码,支持批量查询,用逗号分隔,每次最多30个;若为all,则表示全部,即可获取任意一天内的所有数据。 请求参数描述: 参数名:fields,参数描述:数据字段

waizaowang的博客 2731

hibernate映射list类型

当属性为list类型的时候,我们该怎样生成映射文件呢?    我们知道List最重要的特性就是它是有序的,那么我们的问题就集中在了如何维持这个有序性?最简单的方法就是每个在list集合中的元素,他自己有一个编号,能告诉list他是第几个元素,这样是不是就能解决了呢?hibernate映射list集合确实是这样子做的。        就像上面的这张表一张,xx在teamid为1中,他是第1个元

shizhan1881的专栏 1065

杰理AC696N系列芯片,烧录的时候烧录器连接上芯片之后电脑显示无法识别该设备,该怎么解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1705

Hibernate的Set,List,Map集合映射,数组映射

在数据库操作中,我们通常会用到多张项关联的表,一个用户通常有多个地址。由此我们便需要用到集合映射。 首先看一下整体结构 Set集合映射 步骤一:创建实体对象类,需要单独建表的属性address用Set集合类型封装。 (此处省略了get() set()方法) 步骤二:配置User.hbm.xml映射表

sinat_35821285的博客 832

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

12、Hibernate映射set与List

1、对于set类型,如果集合中的元素是简单地类型,如字符串型,set使用另外一种映射方式: team类: import java.util.HashSet; import java.util.Set; public class Team { private String id; private String teamName; private Set students =

kaoa000的专栏——非淡泊无以明志,非宁静无以致远 5384

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[Hibernate] List 映射例子

List 是 java 集合的一个工具,存储线性的数据,允许重复数据。开发者可以准确控制在 list 那个位置插入数据。本例子演示 Java 的 List 集合和 MySQL 数据库的映射应用。 使用场景:一个员工有一个或多个证书,对员工以及其拥有的证书进行增删该查操作。这个一个 1 : n的场景。 代码的目录结构如下: hibernate.cfg.xml 存储数据库信息,如数...

QQ562224896的博客 145

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Hibernate 之List ,Bag,Map三种映射文件详解

在hibernate中,有几种不同的映射文件,这几种映射文件各有特点,set在前面已经说过,这种映射关系多的一方中没有顺序关系,并且其中也不允许有重复的值,但是在list中,这两个刚好相反,list允许有重复的值,并且多的一方数据在持久化到数据中时也强调了数据的顺序,而bag中和了list和set的特点,bag允许有不用的值,但是这些值之间没有顺序,而map是一种键值对的结构,根据值得不同情况,又

行者歌于途 3930

hibernate的list映射和map映射

List映射 Grade类 public class Grade { private int id; private String name; private List students=new ArrayList(); //省略get/set方法 }Student类 public class Student { private int id; private String na

想念的专栏 584

Hibernate使用List实现一对多映射

List映射和map最大的区别在于,list的index不是作为key出现,而是作为索引出现,我们使用list映射,可以将list的索引持久到数据库中数据库结构: CREATE TABLE `team1` (  `id` varchar(50) NOT NULL,  `name` varchar(50) default NULL,  PRIMARY KEY  (`id`)) ENG

我的世界我的梦 3361

hibernate的四种基础集合映射set,list,map,数组映射

Set映射 步骤一:创建实体对象类,需要单独建表的属性address用Set<String>集合类型封装。 (此处省略了get() set()方法) 步骤二:配置User.hbm.xml映射表 set集合属性的映射:重点消化   name指定要映射的set集合的属性   table集合属性要映射的表   key指定集合表(t...

F13253524870的博客 857

Hibernate List映射文件

Team.hbm.xml <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

萧若寒 1196

hibernate 使用list集合映射的一个问题

主要问题:hibernate中集合映射list中的list-index中的问题: 参见一个配置文件: 在User类的配置文件中配置了一个List是指定他向UserInfo的关联。其中有key,这是指定UserInfo类对应的table中的关联User类对应的表的外...

buzuibuxiu的专栏 376

hibernate mysql list index_Hibernate List映射表

Windows10用户联盟QQ群: 227270512List列表是一个java集合存储在序列中的元素,并允许重复的元素。此接口的用户可以精确地控制,其中列表中的每个元素插入。用户可以通过他们的整数索引访问元素,并搜索列表中的元素。更正式地说,列表通常允许对元素e1和e2,使得e1.equals(e2),它们通常允许多个null元素,如果他们允许的null元素。List列表被映射在该映射表中的元素...

weixin_33365214的博客 169

hibernate mysql list index_[Hibernate] List 映射例子

List 是 java 集合的一个工具,存储线性的数据,允许重复数据。开发者可以准确控制在 list 那个位置插入数据。本例子演示 Java 的 List 集合和 MySQL 数据库的映射应用。使用场景:一个员工有一个或多个证书,对员工以及其拥有的证书进行增删该查操作。这个一个 1 : n的场景。代码的目录结构如下:hibernate.cfg.xml 存储数据库信息,如数据库类型,账号密码,数据库...

weixin_35990136的博客 176
上一篇: Hibernate入门11 - Set 映射
下一篇: Hibernate入门13 - Map 映射
chho
博客等级 码龄24年 9粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值