Hibernate一对多实例

本文向大家介绍Hibernate实例一对多的情况,可能好多人还不了解Hibernate实例一对多,没有关系,下面通过一个实例来帮助您理解Hibernate实例一对多,希望本文能教会你更多东西。

创新互联建站专注于来安企业网站建设,响应式网站,成都做商城网站。来安网站建设公司,为来安等地区提供建站服务。全流程按需制作网站,专业设计,全程项目跟踪,创新互联建站专业和态度为您提供的服务

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

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

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

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

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

 
 
 
  1.  
  2.         class="ClassName"                                  (1)
  3.         not-found="ignore|exception"                       (2)
  4.         entity-name="EntityName"                           (3)
  5.         node="element-name"
  6.         embed-xml="true|false"
  7.     />

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

 
 
 
  1.  name="bars">
  2.      column="foo_id"/>
  3.      class="org.hibernate.Bar"/>
  4. set>

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

重要提示

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

1 先建表

 
 
 
  1.  create   table  student
  2. (sid  varchar ( 32 )  not   null   primary   key ,
  3.  sname  varchar ( 16 ),
  4.  sage  varchar ( 16 ),
  5. )
  6.  create   table  book
  7. (bid  varchar ( 32 )  not   null   primary   key ,
  8. bname  varchar ( 16 ),
  9. bprice  varchar ( 16 ),
  10. sid  varchar ( 32 )
  11. )
  12.  

2.写vo Student.java

 
 
 
  1. package com.test;
  2. import java.util.Set;
  3. public class Student
  4. {
  5.     private String sid;
  6.     private String sname;
  7.     private String sage;
  8.     private Set book;
  9.     public Student()
  10.     {
  11.     }
  12.   // 写上get set

Book.JAVA

 
 
 
  1. package com.test;
  2. public class Book
  3. {
  4.     private String bid;
  5.     private String bname;
  6.     private String bprice;
  7.     public Book()
  8.     {
  9.     }
  10.    //写上get set

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

 
 
 
  1. xml version="1.0"?>
  2.     PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
  3.     "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
  4.      name="com.test.Student" table="student" >
  5.          name="sid" type="string" unsaved-value="null" >
  6.              name="sid" sql-type="char(32)" not-null="true"/>
  7.              class="uuid.hex"/>
  8.          id>
  9.          name="sname">
  10.              name="sname" sql-type="varchar(16)" not-null="true"/>
  11.          property>
  12.          name="sage">
  13.              name="sage" sql-type="varchar(16)" not-null="true"/>
  14.          property>
  15.          name="book" cascade="all" outer-join="true">
  16.              column="sid"/>
  17.              class="com.test.Book" />
  18.          set>
  19.      class>
  20. hibernate-mapping>

Book.hbm.xml

 
 
 
  1. xml version="1.0"?>
  2.     PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
  3.     "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
  4.      name="com.test.Book" table="book" >
  5.          name="bid" type="string" unsaved-value="null" >
  6.              name="bid" sql-type="char(32)" not-null="true"/>
  7.              class="uuid.hex"/>
  8.          id>
  9.          name="bname">
  10.              name="bname" sql-type="varchar(16)" not-null="true"/>
  11.          property>
  12.          name="bprice">
  13.              name="bprice" sql-type="varchar(16)" not-null="true"/>
  14.          property>
  15.      class>
  16. hibernate-mapping>

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

 
 
 
  1. hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N'
  2. ## MySQL
  3. hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
  4. hibernate.connection.driver_class org.gjt.mm.mysql.Driver
  5. hibernate.connection.url jdbc:mysql://localhost:3306/wjcms
  6. hibernate.connection.username root
  7. hibernate.connection.password wujun
  8. hibernate.connection.pool_size 1
  9. hibernate.proxool.pool_alias pool1
  10. hibernate.show_sql true
  11. hibernate.jdbc.batch_size 0
  12. hibernate.max_fetch_depth 1
  13. hibernate.cache.use_query_cache true 

4.写测试类了..

 
 
 
  1. package com.test;
  2. import net.sf.hibernate.Session;
  3. import net.sf.hibernate.SessionFactory;
  4. import net.sf.hibernate.cfg.Configuration;
  5. import net.sf.hibernate.*;
  6. import java.util.Set;
  7. import java.util.HashSet;
  8. import java.sql.*;
  9. import java.util.List;
  10. import java.util.Iterator;
  11. public class TestOneToMany
  12. {
  13.     SessionFactory sf;
  14.     Session session;
  15.     public TestOneToMany()
  16.     {
  17.         try
  18.         {
  19.             Configuration cfg = new Configuration();
  20.             sf = cfg.addClass(Student.class).addClass(Book.class).buildSessionFactory();
  21.         }
  22.         catch(HibernateException ex)
  23.         {
  24.             ex.printStackTrace();
  25.         }
  26.     }
  27.     //插入
  28.     public void doCreate()
  29.     {
  30.         try
  31.         {
  32.             session = sf.openSession();
  33.             Student student = new Student();
  34.             student.setSname("小王");
  35.             student.setSage("22");
  36.             Set bookSet = new HashSet();
  37.             Book book = null;
  38.             for(int i=0;i<2;i++)
  39.             {
  40.                 book = new Book();
  41.                 book.setBname("java "+i);
  42.                 book.setBprice("50");
  43.                 bookSet.add(book);
  44.             }
  45.             student.setBook(bookSet);
  46.             session.save(student);
  47.             session.flush();
  48.             session.connection().commit();
  49.         }
  50.         catch(HibernateException ex)
  51.         {
  52.             ex.printStackTrace();
  53.         }
  54.         catch(SQLException ex1)
  55.         {
  56.             ex1.printStackTrace();
  57.         }
  58.         finally
  59.         {
  60.                 try{
  61.                     session.close();
  62.                 }
  63.                 catch(HibernateException ex2){
  64.                 }
  65.         }
  66.     }
  67.     //查询
  68.     public void doQuery()
  69.     {
  70.         try{
  71.             session = sf.openSession();
  72.             Query q = session.createQuery("select s from Student as s");
  73.             List l = q.list();
  74.             Student s = null;
  75.             Book book = null;
  76.             for(int i=0;i();i++)
  77.             {
  78.                 s = (Student)l.get(i);
  79.                 System.out.println("姓名: "+s.getSname());
  80.                 System.out.println("年龄: "+s.getSage());
  81.                 System.out.println("所有的书:");
  82.                 Iterator it = s.getBook().iterator();
  83.                 while(it.hasNext())
  84.                 {
  85.                     book = (Book)it.next();
  86.                     System.out.println("书名: "+book.getBname());
  87.                     System.out.println("价格: "+book.getBprice());
  88.                 }
  89.             }
  90.         }
  91.         catch(HibernateException ex){
  92.             ex.printStackTrace();
  93.         }
  94.         finally{
  95.             try{
  96.                 session.close();
  97.             }
  98.             catch(HibernateException ex2){
  99.             }
  100.         }
  101.     }
  102.     public static void main(String[] args)
  103.     {
  104.         TestOneToMany t = new TestOneToMany();
  105.         //t.doCreate();
  106.         t.doQuery();
  107.     }
  108. }

好了。。在这里把这些例子几下来。。方便查阅。。也是很适合象我们这样的出学者。。。

当前文章:Hibernate一对多实例
文章起源:http://www.shufengxianlan.com/qtweb/news23/155223.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联