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

创新互联建站专注于来安企业网站建设,响应式网站,成都做商城网站。来安网站建设公司,为来安等地区提供建站服务。全流程按需制作网站,专业设计,全程项目跟踪,创新互联建站专业和态度为您提供的服务
先看由满江红翻译团队(RedSaga Translate Team)翻译的一对多配置说明,然后在看例子
一对多关联(One-to-many Associations)
一对多关联 通过外键 连接两个类对应的表,而没有中间集合表。 这个关系模型失去了一些Java集合的语义:
一个被包含的实体的实例只能被包含在一个集合的实例中
一个被包含的实体的实例只能对应于集合索引的一个值中
一个从Product到Part的关联需要关键字字段,可能还有一个索引字段指向Part所对应的表。 标记指明了一个一对多的关联。
- class="ClassName" (1)
 - not-found="ignore|exception" (2)
 - entity-name="EntityName" (3)
 - node="element-name"
 - embed-xml="true|false"
 - />
 
(1) class(必须):被关联类的名称。 
(2) not-found (可选 - 默认为exception): 指明若缓存的标示值关联的行缺失,该如何处理: ignore 会把缺失的行作为一个空关联处理。 
(3) entity-name (可选): 被关联的类的实体名,作为class的替代。 
例子
name="bars"> column="foo_id"/> class="org.hibernate.Bar"/> - 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
- xml version="1.0"?>
 - PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
 - "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
 name="com.test.Student" table="student" > name="sid" type="string" unsaved-value="null" > name="sid" sql-type="char(32)" not-null="true"/> class="uuid.hex"/> - id>
 name="sname"> name="sname" sql-type="varchar(16)" not-null="true"/> - property>
 name="sage"> name="sage" sql-type="varchar(16)" not-null="true"/> - property>
 name="book" cascade="all" outer-join="true"> column="sid"/> class="com.test.Book" /> - set>
 - class>
 - hibernate-mapping>
 
Book.hbm.xml
- xml version="1.0"?>
 - PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
 - "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
 name="com.test.Book" table="book" > name="bid" type="string" unsaved-value="null" > name="bid" sql-type="char(32)" not-null="true"/> class="uuid.hex"/> - id>
 name="bname"> name="bname" sql-type="varchar(16)" not-null="true"/> - property>
 name="bprice"> name="bprice" sql-type="varchar(16)" not-null="true"/> - 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
 ();i++) - {
 - s = (Student)l.get(i);
 - System.out.println("姓名: "+s.getSname());
 - System.out.println("年龄: "+s.getSage());
 - System.out.println("所有的书:");
 - Iterator it = s.getBook().iterator();
 - while(it.hasNext())
 - {
 - book = (Book)it.next();
 - System.out.println("书名: "+book.getBname());
 - System.out.println("价格: "+book.getBprice());
 - }
 - }
 - }
 - catch(HibernateException ex){
 - ex.printStackTrace();
 - }
 - finally{
 - try{
 - session.close();
 - }
 - catch(HibernateException ex2){
 - }
 - }
 - }
 - public static void main(String[] args)
 - {
 - TestOneToMany t = new TestOneToMany();
 - //t.doCreate();
 - t.doQuery();
 - }
 - }
 
好了。。在这里把这些例子几下来。。方便查阅。。也是很适合象我们这样的出学者。。。
                分享文章:Hibernate一对多实例
                
                文章位置:http://www.csdahua.cn/qtweb/news23/155223.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网