Hibernate映射List

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

        Hibernate映射集合操作,List!

        一、POJO

package example.start.list;

import java.util.ArrayList;
import java.util.List;

public class Person
{
 private int id;
 private String name;
 private int age;
 private List schools = new ArrayList();  
  
 public Person()
 {
 }

 public int getId()
 {
  return id;
 }

 public void setId(int id)
 {
  this.id = id;
 }

 public String getName()
 {
  return name;
 }

 public void setName(String name)
 {
  this.name = name;
 }

 public int getAge()
 {
  return age;
 }

 public void setAge(int age)
 {
  this.age = age;
 }

 public List getSchools()
 {
  return schools;
 }

 public void setSchools(List schools)
 {
  this.schools = schools;
 }

 

}
       二、Person.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="example.start.list.Person" table="person">
        <id name="id" column="personid">
            <generator class="identity"/>
        </id>
        <property name="name" type="string">
            <column name="name"/>
        </property>
        <property name="age" type="integer">
            <column name="age" />
        </property>
           
       <list name="schools" table="school">
         <key column="personid" not-null="true"/>
         <list-index column="list_order"/>
         <element type="string" column="school_name"/>
       </list>
    </class>
</hibernate-mapping>

        三、测试文件

package example.start.list;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import com.HibernateSessionFactory;

public class CreateAndStorePerson
{
 
 public static void main(String[] args)
 {
  Session session = HibernateSessionFactory.getSession();
  Transaction tx = session.beginTransaction();
  
  Person yeeku = new Person();
  yeeku.setAge(22);
  yeeku.setName("List"); 
  
  List s = new ArrayList();
  s.add("中学"); 
  s.add("大学");
    
  yeeku.setSchools(s);
    
  session.save(yeeku);
  tx.commit();
  HibernateSessionFactory.closeSession();
  
 }

}

 

       四、HibernateSessionFactory

package com;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;

/**
 * Configures and provides access to Hibernate sessions, tied to the current
 * thread of execution. Follows the Thread Local Session pattern, see
 * {@link http://hibernate.org/42.html }.
 */
public class HibernateSessionFactory
{

 /**
  * Location of hibernate.cfg.xml file. Location should be on the classpath
  * as Hibernate uses #resourceAsStream style lookup for its configuration
  * file. The default classpath location of the hibernate config file is in
  * the default package. Use #setConfigFile() to update the location of the
  * configuration file for the current session.
  */
 private static String      CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
 private static final ThreadLocal<Session> threadLocal    = new ThreadLocal<Session>();
 private static Configuration    configuration   = new Configuration();
 private static org.hibernate.SessionFactory sessionFactory;
 private static String      configFile    = CONFIG_FILE_LOCATION;

 static
 {
  try
  {
   configuration.configure(configFile);
   sessionFactory = configuration.buildSessionFactory();
  }
  catch (Exception e)
  {
   System.err.println("%%%% Error Creating SessionFactory %%%%");
   e.printStackTrace();
  }
 }

 private HibernateSessionFactory()
 {
 }

 /**
  * Returns the ThreadLocal Session instance. Lazy initialize the
  * <code>SessionFactory</code> if needed.
  *
  * @return Session
  * @throws HibernateException
  */
 public static Session getSession() throws HibernateException
 {
  Session session = (Session) threadLocal.get();

  if (session == null || !session.isOpen())
  {
   if (sessionFactory == null)
   {
    rebuildSessionFactory();
   }
   session = (sessionFactory != null) ? sessionFactory.openSession()
     : null;
   threadLocal.set(session);
  }

  return session;
 }

 /**
  * Rebuild hibernate session factory
  */
 public static void rebuildSessionFactory()
 {
  try
  {
   configuration.configure(configFile);
   sessionFactory = configuration.buildSessionFactory();
  }
  catch (Exception e)
  {
   System.err.println("%%%% Error Creating SessionFactory %%%%");
   e.printStackTrace();
  }
 }

 /**
  * Close the single hibernate session instance.
  *
  * @throws HibernateException
  */
 public static void closeSession() throws HibernateException
 {
  Session session = (Session) threadLocal.get();
  threadLocal.set(null);

  if (session != null)
  {
   session.close();
  }
 }

 /**
  * return session factory
  */
 public static org.hibernate.SessionFactory getSessionFactory()
 {
  return sessionFactory;
 }

 /**
  * return session factory session factory will be rebuilded in the next call
  */
 public static void setConfigFile(String configFile)
 {
  HibernateSessionFactory.configFile = configFile;
  sessionFactory = null;
 }

 /**
  * return hibernate configuration
  */
 public static Configuration getConfiguration()
 {
  return configuration;
 }

}

 

        五 hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

 <session-factory>

  <!--<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>-->
  <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
  <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
  <property name="myeclipse.connection.profile">org.gjt.mm.mysql.Driver</property>
  <property name="connection.username">root</property>
  <property name="connection.password">root</property>
  <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="show_sql">true</property>
  <property name="jdbc.fetch_size">50</property>
  <property name="jdbc.batch_size">30</property>


  <mapping resource="example/start/list/Person.hbm.xml" />

 </session-factory>

</hibernate-configuration>

 

        六、数据表

      

person 表 
id  int  11                          name  vachar 255                      age   int 11

school表

personid  int 11                  school_name  vacher 255        list_index     int  11

 

 

 

注:

      映射List集合,List集合是个有序的集合,所以要使用<list-index column="list_order"/>来标明其顺序,使用关联的外键和集合的次序来作为联合主键。
 

别再为数据发愁:5分钟理解事件相机原理,并自己动手生成事件图像 本文深入浅出地解析了事件相机的工作原理,并提供了从静态图像生成事件数据的实用方法。通过Python代码示例,读者可以快速掌握如何模拟事件相机的输出,应用于机器人导航、自动驾驶等领域,解决数据获取难题。 阅读详情

相关推荐

SPSS回归分析(线性:一元(简单)和多重;非线性logistic)

SPSS线性回归分析回归分析一、线性模型(针对连续因变量,线性关系)(一)简单线性回归(一元线性回归)1、绘制散点图2、建立简单(一元)线性回归模型3、建立模型后,检查预测结果(二)多重回归分析1、绘制矩阵分布散点图(论文专用你懂的)2、建立多重回归模型point 1:自变量加入方法:逐步(步进)法3、建立模型后,检查预测结果二、非线性模型(将非线性问题转换为线性问题)1、logistic分析的回归模型1.1 建立回归模型1.2 利用回归模型进行预测 根据之前的学习,通过评价实验得到了主观数据, 通过 描述

weixin_44394352的博客 5万+

Hibernate学习---单表查询

我们都知道SQL是非常强大的,为什么这么说呢?相信学过数据库原理的同学们都深有体会,SQL语句变化无穷,好毫不夸张的说可以实现任意符合我们需要的数据库操作,既然前面讲到Hibernate非常强大,所以Hibernate也是能够实现SQL的一切数据库操作。在SQL中,单表查询是最常用的语句,同理Hibernate最常用到的也是查询语句,所以今天就来讲讲Hibernate的单表查询:今天要将的内容分以下

MindMrWang的blog 467

国产大模型 coding plan 实战决策指南:GLM、Kimi、豆包、abab 四大模型分层选型与工程落地

大模型辅助编程(coding assistant)正从概念验证走向规模化工程落地,其核心已不再是‘能否生成代码’,而是‘如何在真实开发流程中精准赋能’。理解模型能力边界、匹配技术栈特征、构建分层工作流(L1行级补全/L2函数生成/L3模块重构),是实现稳定提效的关键。GLM系列以工程稳定性见长,适合代码审计与测试生成;Kimi-Max凭借200K超长上下文胜任深度重构与合规审查;豆包响应快、框架适配深,是IDE高频补全的理想选择;abab系列则在IoT固件等跨模态场景中展现独特价值。本文聚焦国产模型在金融、

weixin_32238157的博客 426

hibernate中的session用法

Session的主要功能是提供对映射的实体类实例的创建,读取和删除操作。实例可能以下面三种状态存在: 临时状态(transient): 不曾进行持久化,未与任何Session相关联 持久化状态(persistent): 仅与一个Session相关联 脱管状态(detached): 已经进行过持久化,但当前未与任何Session相关联 1,通过get()或load()方法得到

tuke_tuke的博客 7283

立创EDA + AI 生成 STM32 原理图教程1

AI辅助立创EDA设计STM32原理图教程摘要 本教程系统介绍如何利用AI工具(如Claude Code、DeepSeek等)与立创EDA专业版结合,实现STM32原理图的智能生成与优化。主要内容包括: 技术架构:采用分层设计,AI生成结构化网表数据,由立创EDA执行确定性绘图,确保可审查性 环境搭建:详细说明立创EDA专业版、Node.js等工具的安装配置 五种AI集成方案:包括官方AI Skill、MCP Server等不同实现方式 核心功能: 自动提取STM32引脚定义 智能元件选型与LCSC编号匹配

shihui2003的博客 1499

深度学习---双层神经网络中矩阵的运算及其含义记录

深度学习---双层神经网络中矩阵的运算及其含义记录神经网络的正向传播与反向传播正向传播第一层的权重矩阵第一层的输入矩阵Z^1^ = W^1^X^1^ + b^1^A^1^ = σ(Z^1^)第二层的权重矩阵第二层的输入矩阵Z^2^ = W^2^A^1^ + b^2^反向传播dz^2^ = A^2^ - Ydw^2^ = 1/n dz^2^A^1T^db^2^ = 1/n np.sum(dz^2...

qq_43228441的博客 3742

Hibernate集合映射之List

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

我的世界我的梦 3748

数据结构:五岔路口交通管理红绿灯设计

我们可以知道这是一个“图”的着色问题,首先要考虑,为什么可行路线是13条?当然可以通过穷举得出,如果用公式:则是: 或者 因为一条路线必须包括一出一进两个方向 第一种答案的解法: 一、固定E为入口,则有C_4^1=4的可能; 二、除去E(因为E只有一个入向),剩下ABCD四个路口,然后因为C只有一个出方向,所以从剩下 的ABD中选择一个入口,即C_3^1; 三、再从剩下的三个出口任选

潘猫猫的世界 1万+

Hibernate(八)List映射

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

Waylon的博客 6241

Windows下用Docker快速搭建SearXNG私有搜索引擎(附Dify集成配置)

本文详细介绍了在Windows环境下使用Docker快速搭建SearXNG私有搜索引擎的完整流程,包括环境准备、容器化部署、安全配置优化以及与Dify平台的深度集成方法。通过分步指导和实用配置示例,帮助开发者构建兼具隐私保护和AI增强能力的本地化搜索解决方案,特别适合需要定制化搜索服务的应用场景。

weixin_30300225的博客 335

Vue3 - 完美解决高德地图定位失败 Get ipLocation failed.Geolocation permission denied.(获取ipLocation失败。地理定位权限被拒绝。)

Get ipLocation failed.Geolocation permission denied.,vue3引入高德地图当前定位失败 ,vue3中使用高德地图定位报错,高德地图API用户定位失败,高德地图H5 定位失败报错排查和解决方案,微信公众号H5网页高德地图定位报错,谷歌浏览器-高德地图定位失败geolocation,getCurrentPosition 返回的 message报错,如何解决此问题,uniapp h5高德地图,微信、QQ等内置浏览器定位失败,高德地图实现实时用户位置定位,引入高德

🏆 前端领域优质创作者 4167

[Hibernate] List 映射例子

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

QQ562224896的博客 145

软件设计师---计算机系统

软件设计师---计算机系统

我从不打没有准备的仗! 3万+

hibernate映射list类型

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

shizhan1881的专栏 1065

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Hibernate入门12 - List 映射

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

chho的专栏 1096

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

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

sunxing007的专栏 1551

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

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

sinat_35821285的博客 832

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

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

buzuibuxiu的专栏 374

hibernate list映射

Answer类为Question类一对多关联关系,即一个问题对应多个答案。他们的表结构如下 如果希望Answer集合在Question类中作为List存储,我们可以使用hibernate的list或者bag标签来进行映射。 当使用list标签映射时,Question.hbm.xml中的配置如下: Xml代码

月之神 1513

hibernate 映射 List 值对象 简单映射

接上篇《hibernate 映射 bag/idbag值对象 简单映射》 如果允许给一个User添加多个Task,并且要记录顺序怎么办? 这个和List的语义相同用List映射 package com.ccay.test.valueCollection.list.xml; import java.util.ArrayList; import java.util.List; public c

gudong2945的专栏 1466

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

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

weixin_35990136的博客 176
上一篇: 说说Java内存泄露
下一篇: java中的Serializable接口的作用
myjava_024
博客等级 码龄20年 59粉丝 45原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值