iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Hibernate一对多数据关联是什么
  • 426
分享到

Hibernate一对多数据关联是什么

2023-06-17 21:06:40 426人浏览 安东尼
摘要

本篇内容主要讲解“Hibernate一对多数据关联是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate一对多数据关联是什么”吧!Hibernate一对多数据关联。指的是单向一对

本篇内容主要讲解“Hibernate一对多数据关联是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate一对多数据关联是什么”吧!

Hibernate一对多数据关联。指的是单向一对多数据关联一个用户有多个地址,在用户类TUser中包含地址类TAddress集合

Hibernate如果上手了,那么所谓的一对多,多对一,多对多,一对一这些关系,应该很快能理解.下面主要介绍Hibernate一对多的问题。

由TUser对象将自身的id赋给addr.user_id,这样导致addr属性值变动,在事物提交的时候,会进行update。


1)当save该用户的时候,

  1. insert into t_address  (user_id, address, zipcode, tel) value (null, "HongKong", "233123", "1123")  


2)当tx.commit()时:

  1. update t_address user_id="1", address="HongKong", zipcode="233123",tel="1123" where id=2; 

这样,在save user时,就会出现约束违例。

调整方法:
可以在定义数据表字段时候,不加NOT NULL约束。或者在开始为user_id随意赋一个非空值(因为还要update,不正确也没关系),或者将user_id字段从TAddress.hbm.xml中删除(本例就是这样实现)。但是这些都是权宜之计,用两条sql语句完成一次数据库操作,性能低下。而双向一对多解决了这个问题。
下面来实现双向关联:修改配置文件 TUser.hbm.xml

<?xml version="1.0"?> "Http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping>     <class name="cn.blogjava.start.TUser" table="T_User" catalog="sample"      dynamic-update="true" dynamic-insert="true"     >         <id name="id" type="integer">             <column name="id" />             <generator class="native" />         id>         <property name="name" type="string" column="name" />         <property name="age" type="java.lang.Integer" column="age" />          <set               name="address"               table="t_address"               inverse="true"             cascade="all"               order-by="zipcode asc"             >             <key column="user_id">             key>             <one-to-many class="cn.blogjava.start.TAddress" />         set>     class> hibernate-mapping>

设定inverse="true",表明将TUser类作为被动类,将数据关联的维护工作交给关联对象TAddress来管理。
在one-to-many模型中,将many一方设为主控方有助于性能的改善。(让总理记住每个人困难,但是每个人记住总理方便)

TAddress.hbm.xml

<?xml version="1.0"?> "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping>     <class name="cn.blogjava.start.TAddress" table="T_Address" catalog="sample">         <id name="id" type="integer">             <column name="id" />             <generator class="native" />         id>         <property name="address" type="string" column="address" />         <property name="zipcode" type="string" column="zipcode" />         <property name="tel" type="string" column="tel" />         <property name="type" type="string" column="type" />         <property name="idx" type="java.lang.Integer" column="idx" />         <many-to-one                   name="user"                     class="cn.blogjava.start.TUser"                   cascade="none"                   outer-join="auto"                   update="true"                                      insert="true"                   access="property"                   column="user_id"                   not-null="true"         />     class> hibernate-mapping>

对TAddress.java做如下改造:去掉user_id字段,增加user字段,和getter,setter方法。

package cn.blogjava.start;   import java.io.Serializable;   public class TAddress implements Serializable {            private Integer id;      private String address;      private String zipcode;      private String tel;      private String type;      private Integer idx;      private TUser user;            public TUser getUser() {          return user;      }      public void setUser(TUser user) {          this.user = user;      }      public Integer getId() {          return id;      }      public void setId(Integer id) {          this.id = id;      }      public String getAddress() {          return address;      }      public void setAddress(String address) {          this.address = address;      }      public Integer getIdx() {          return idx;      }      public void setIdx(Integer idx) {          this.idx = idx;      }      public String getTel() {          return tel;      }      public void setTel(String tel) {          this.tel = tel;      }      public String getType() {          return type;      }      public void setType(String type) {          this.type = type;      }      public String getZipcode() {          return zipcode;      }      public void setZipcode(String zipcode) {          this.zipcode = zipcode;      }   }

测试代码
既然TUser不维护关联关系,需要TAddress需要自己来维护TUser,所以需要addr.setUser(user);

package cn.blogjava.start;   import java.util.HashSet;  import java.util.Iterator;  import java.util.List;   import junit.framework.Assert;  import junit.framework.TestCase;   import org.hibernate.HibernateException;  import org.hibernate.Session;  import org.hibernate.SessionFactory;  import org.hibernate.Transaction;  import org.hibernate.cfg.Configuration;    public class HibernateTest extends TestCase {            Session session = null;       protected void setUp() {          try {              Configuration config = new Configuration().configure();              SessionFactory sessionFactory = config.buildSessionFactory();              session = sessionFactory.openSession();                        } catch (HibernateException e) {              e.printStackTrace();          }              }       protected void tearDown() {          try {              session.close();                  } catch (HibernateException e) {              e.printStackTrace();          }              }                              public void testInsert() {          Transaction tran = null;          try {                        TUser user = new TUser();              user.setName("byf");              user.setAge(new Integer(26));                            TAddress addr = new TAddress();              addr.setTel("1123");              addr.setZipcode("233123");              addr.setAddress("HongKong");              addr.setUser(user);                            TAddress addr2 = new TAddress();              addr2.setTel("139");              addr2.setZipcode("116001");              addr2.setAddress("dalian");                     addr2.setUser(user);               TAddress addr3 = new TAddress();              addr3.setTel("136");              addr3.setZipcode("100080");              addr3.setAddress("beijing");              addr3.setUser(user);                            //设置关联              HashSet set = new HashSet();              set.add(addr);              set.add(addr2);              set.add(addr3);              user.setAddress(set);                                                   tran = session.beginTransaction();                                              //插入user信息              session.save(user);              session.flush();              tran.commit();              Assert.assertEquals(user.getId().intValue()>0 ,true);          } catch (HibernateException e) {              e.printStackTrace();              Assert.fail(e.getMessage());              if(tran != null) {                  try {                      tran.rollback();                  } catch (Exception e1) {                      e1.printStackTrace();                  }              }          }      }                              public void testSelect(){          String hql = " from TUser where name='byf'";          try {              List userList = session.createQuery(hql).list();              TUser user = (TUser)userList.get(0);              System.out.println("user name is " + user.getName());                            for (Iterator iter = user.getAddress().iterator(); iter.hasNext();) {                  TAddress addr = (TAddress) iter.next();                  System.out.println("user address is " + addr.getAddress());                              }              Assert.assertEquals(user.getName(), "byf");          } catch (Exception e) {              e.printStackTrace();              Assert.fail(e.getMessage());          }      }  }

到此,相信大家对“Hibernate一对多数据关联是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Hibernate一对多数据关联是什么

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

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

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

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

下载Word文档
猜你喜欢
  • Hibernate一对多数据关联是什么
    本篇内容主要讲解“Hibernate一对多数据关联是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate一对多数据关联是什么”吧!Hibernate一对多数据关联。指的是单向一对...
    99+
    2023-06-17
  • Hibernate映射一对多关联关系是什么
    这篇文章主要讲解了“Hibernate映射一对多关联关系是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate映射一对多关联关系是什么”吧!在域模型中,类和类之间最普通的关系...
    99+
    2023-06-17
  • Hibernate一对多数据关联怎么实现
    本篇内容主要讲解“Hibernate一对多数据关联怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate一对多数据关联怎么实现”吧!数据模型表定义sqluse sam...
    99+
    2023-06-17
  • Hibernate的一对一,一对多/多对一关联保存的实现
    目录一对一关联保存:留言表实体类配置:(主表)留言内容表配置:(从表)留言表hbm.xml配置:(主表)留言内容表hbm.xml配置:(从表)一对多/多对一保存活动表实体类配置:(主...
    99+
    2024-04-02
  • 利用Hibernate怎么实现一个多对一单项关联
    这期内容当中小编将会给大家带来有关利用Hibernate怎么实现一个多对一单项关联,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。概念      ...
    99+
    2023-05-31
    hibernate te
  • Hibernate映射关联是什么
    这篇文章主要讲解了“Hibernate映射关联是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate映射关联是什么”吧!Hibernate映射关联关系和我们现实世界里事物的关...
    99+
    2023-06-17
  • Spring Boot 整合JPA 数据模型关联使用操作(一对一、一对多、多对多)
    目录表关联一对一一对多和多对一多对多表关联 上一篇介绍了JPA的简单使用,这一篇介绍JPA在表关联上的使用 一对一 配置参数JPA对于数据实体一对一映射使用的是@OneToOne注解...
    99+
    2024-04-02
  • Hibernate多表关联查询怎么实现
    本篇内容介绍了“Hibernate多表关联查询怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Hibernate简介Hiberna...
    99+
    2023-06-17
  • Mybatis怎么实现一对一、一对多关联查询
    今天小编给大家分享一下Mybatis怎么实现一对一、一对多关联查询的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Mybati...
    99+
    2023-07-05
  • Java Hibernate中一对多和多对多关系的映射方式
    目录Hibernate的一对多和多对多Hibernate的一对多Hibernate的一对多配置Hibernate的一对多操作Hibernate的多对多Hibernate的多对多配置H...
    99+
    2023-05-18
    Java Hibernate一对多 Java Hibernate多对多
  • 详解hibernate双向多对多关联映射XML与注解版
    双向多对多关联映射原理:假设,一个员工可能有多个角色,一个角色可能有多个员工,从员工或角色的角度看,这就是多对多的关系,不管从哪一个角度看,都是多对多的联系。多对多关联映射关系一般采用中间表的形式来实现,即新增一种包含关联双方主键的表。实现...
    99+
    2023-05-31
    hibernate 映射 te
  • Hibernate操作延迟加载的关联是什么
    这篇文章主要讲解了“Hibernate操作延迟加载的关联是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate操作延迟加载的关联是什么”吧!默认情况下,Hibernate 3...
    99+
    2023-06-17
  • Hibernate一对多怎么实现
    本篇内容主要讲解“Hibernate一对多怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate一对多怎么实现”吧!先看由满江红翻译团队(RedSaga Translate T...
    99+
    2023-06-17
  • MYSQL/ORACLE 一对多关联查询,取多表里最新的那一条数据
    完整sql如下,t_qms_imp_car_info表中VIN_NO是唯一的,但是 t_qms_imp_iot_eol 表中VIN有重复,现在想两张表关联查询获取到t_qms_imp_iot_eol ...
    99+
    2023-09-05
    mysql 数据库 sql
  • Hibernate中怎么实现多对一和一对多操作
    这期内容当中小编将会给大家带来有关Hibernate中怎么实现多对一和一对多操作,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、多对一和一对多概念其实这个概念上来说很简单,比如一个客户可以有多个订单,多...
    99+
    2023-06-17
  • 一对多时,如何将userId相同的多条关联表数据合并为一条
    工作中遇到了主表关联拓展表的字段,查询后在表单上将一个userId关联到的多条拓展表数据合并为一行展示的场景,在这里记录一下解决方法。 1.PGSQL的方法 业务场景:存在3个表(人员表,人员属性关联...
    99+
    2023-09-06
    mysql 数据库 java
  • Django数据映射(一对一,一对多,多对多)
    目录数据表关联关系映射一对一映射用法示例一对多映射用法示例多对多映射用法示例数据表关联关系映射 常用的表关联方式有三种: 一对一映射如: 一个身份证对应一个人 一对多映射如: 一个班...
    99+
    2024-04-02
  • MyBatis中怎么进行一对多关联查询
    在MyBatis中进行一对多关联查询可以通过在映射文件中使用嵌套查询来实现。具体步骤如下: 在映射文件中定义两个查询语句,一个用于...
    99+
    2024-04-08
    MyBatis
  • php关联数组是什么
    php关联数组是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。php是什么语言php,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Prepro...
    99+
    2023-06-14
  • 使用Mybatis 如何实现多对一或一对多的关联查询
    使用Mybatis 如何实现多对一或一对多的关联查询?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先  数据库量表之间字段关系(没有主外键)studentmaj...
    99+
    2023-05-31
    mybatis 一对多 多对一
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作