千家信息网

Hibernate一对多怎么实现

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"Hibernate一对多怎么实现",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Hibernate一对多怎么实现"吧!先看由满江红翻译团队
千家信息网最后更新 2026年11月01日Hibernate一对多怎么实现

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

先看由满江红翻译团队(RedSaga Translate Team)翻译的一对多配置说明,然后在看例子
一对多关联(One-to-many Associations)

一对多关联 通过外键 连接两个类对应的表,而没有中间集合表。 这个关系模型失去了一些Java集合的语义:

一个被包含的实体的实例只能被包含在一个集合的实例中

一个被包含的实体的实例只能对应于集合索引的一个值中

一个从Product到Part的关联需要关键字字段,可能还有一个索引字段指向Part所对应的表。标记指明了一个一对多的关联。

(1) class(必须):被关联类的名称。
(2) not-found (可选 - 默认为exception): 指明若缓存的标示值关联的行缺失,该如何处理: ignore 会把缺失的行作为一个空关联处理。
(3) entity-name (可选): 被关联的类的实体名,作为class的替代。
例子

           set>

注意:元素不需要定义任何字段。 也不需要指定表名。

重要提示

如果Hibernate实例一对多关联中的外键字段定义成NOT NULL,你必须把映射声明为not-null="true",或者使用双向关联,并且标明inverse="true"。

1 先建表

 create   table  student  (sid  varchar ( 32 )  not   null   primary   key ,   sname  varchar ( 16 ),   sage  varchar ( 16 ),  )   create   table  book  (bid  varchar ( 32 )  not   null   primary   key ,  bname  varchar ( 16 ),  bprice  varchar ( 16 ),  sid  varchar ( 32 )  )

2.写vo Student.java

package com.test;   import java.util.Set;   public class Student  {      private String sid;      private String sname;      private String sage;      private Set book;      public Student()      {      }    // 写上get set

Book.JAVA

package com.test;   public class Book  {      private String bid;      private String bname;      private String bprice;      public Book()      {      }     //写上get set

3.写对应的映射文件Student.hbm.xml

     PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"      "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">                                                     id>                                property>                                property>                                             set>      class>  hibernate-mapping>

Book.hbm.xml

     PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"      "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">                                                     id>                                property>                                property>      class>  hibernate-mapping>

接着把下面的hibernate.properties文件拷到classes目录下。。这里用的是mysql

hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N'  ## MySQL  hibernate.dialect net.sf.hibernate.dialect.MySQLDialect  hibernate.connection.driver_class org.gjt.mm.mysql.Driver  hibernate.connection.url jdbc:mysql://localhost:3306/wjcms  hibernate.connection.username root  hibernate.connection.password wujun  hibernate.connection.pool_size 1  hibernate.proxool.pool_alias pool1  hibernate.show_sql true  hibernate.jdbc.batch_size 0  hibernate.max_fetch_depth 1  hibernate.cache.use_query_cache true

4.写测试类了..

package com.test;   import net.sf.hibernate.Session;  import net.sf.hibernate.SessionFactory;  import net.sf.hibernate.cfg.Configuration;  import net.sf.hibernate.*;  import java.util.Set;  import java.util.HashSet;  import java.sql.*;  import java.util.List;  import java.util.Iterator;   public class TestOneToMany  {      SessionFactory sf;      Session session;      public TestOneToMany()      {          try          {              Configuration cfg = new Configuration();              sf = cfg.addClass(Student.class).addClass(Book.class).buildSessionFactory();          }          catch(HibernateException ex)          {              ex.printStackTrace();          }      }      //插入      public void doCreate()      {          try          {              session = sf.openSession();               Student student = new Student();              student.setSname("小王");              student.setSage("22");               Set bookSet = new HashSet();              Book book = null;              for(int i=0;i<2;i++)              {                  book = new Book();                  book.setBname("java "+i);                  book.setBprice("50");                  bookSet.add(book);              }              student.setBook(bookSet);               session.save(student);              session.flush();              session.connection().commit();           }          catch(HibernateException ex)          {              ex.printStackTrace();          }          catch(SQLException ex1)          {              ex1.printStackTrace();          }          finally          {                  try{                      session.close();                  }                  catch(HibernateException ex2){                  }          }       }      //查询      public void doQuery()      {          try{              session = sf.openSession();              Query q = session.createQuery("select s from Student as s");              List l = q.list();              Student s = null;              Book book = null;              for(int i=0;i

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

关联 字段 实例 实体 被包 例子 内容 文件 索引 缺失 学习 查询 实用 更深 重要 两个 书名 价格 元素 关键 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网是第几次科技革命的成果 深圳九邦互联网科技有限公司 互联网科技活动banner 金诺互联网科技 网络科技有限互联网 互联网金融公司科技 深圳艾佳互联网科技 深圳卡尔迅互联网科技有限公司怎么样 中正互联网科技招聘 汉立互联网科技有限公司联系电话 卫星互联网科技股票 移动互联网科技股 互联网科技教育视频 互联网科技与管理 互联网金融中的现代科技 广州新华互联网科技学校电竞方面 高科技互联网发展前景如何 广州富喜互联网络科技 版纳互联网科技选哪家 艺电能源互联网科技有限公司招聘 新华互联网科技学院 卓越科技(互联网 ) 深圳天众互联网科技公司 融贸通互联网科技 受益于互联网科技的高速发展 互联网金融中的现代科技 长沙茂晟互联网科技有限公司 中国科技和美国互联网 西安左小互联网科技有限公司 三亚科技创新互联网基地
0