`
ninebirds
  • 浏览: 79855 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

hibernate one-to-many典型关系例子

阅读更多

hibernate一对多例子-已更新(二)

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

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

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

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

一个从ProductPart的关联需要关键字字段,可能还有一个索引字段指向Part所对应的表。 <one-to-many></one-to-many>标记指明了一个一对多的关联。

<one-to-many class="ClassName"></one-to-many>(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的替代。

例子

<set name="bars">
    <key column="foo_id"/>
    <one-to-many class="org.hibernate.Bar"/>
</set>

注意:<one-to-many>元素不需要定义任何字段。 也不需要指定表名。

重要提示 :如果一对多关联中的外键字段定义成NOT NULL,你必须把<key>映射声明为not-null="true",或者使用双向关联,并且标明inverse="true"

详细请看http://www.huihoo.com/framework/hibernate/reference-v3_zh-cn/collections.html



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"?>
<!DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
>

<hibernate-mapping>

    
<class name="com.test.Student" table="student" >

        
<id name="sid" type="string" unsaved-value="null" >
            
<column name="sid" sql-type="char(32)" not-null="true"/>
            
<generator class="uuid.hex"/>
        
</id>

        
<property name="sname">
            
<column name="sname" sql-type="varchar(16)" not-null="true"/>
        
</property>

        
<property name="sage">
            
<column name="sage" sql-type="varchar(16)" not-null="true"/>
        
</property>

        
<set name="book" cascade="all" outer-join="true">
            
<key column="sid"/>
            
<one-to-many class="com.test.Book" />
        
</set>

    
</class>

</hibernate-mapping>


Book.hbm.xml

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

<hibernate-mapping>

    
<class name="com.test.Book" table="book" >

        
<id name="bid" type="string" unsaved-value="null" >
            
<column name="bid" sql-type="char(32)" not-null="true"/>
            
<generator class="uuid.hex"/>
        
</id>

        
<property name="bname">
            
<column name="bname" sql-type="varchar(16)" not-null="true"/>
        
</property>

        
<property name="bprice">
            
<column 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();
                }

                
分享到:
评论

相关推荐

    Hibernate one-to-many / many-to-one关系映射

    "Hibernate one-to-many / many-to-one关系映射"是两个基本的关系类型,用于表示实体间的关联。在这个主题中,我们将深入探讨这两种关系映射的原理、配置和实际应用。 一、一对一(one-to-one)与一对多(one-to-...

    (4)Hibernate中的many-to-one和one-to-many关系

    以下是一个简单的例子,展示了一个班级(Class)与学生(Student)的one-to-many关系,以及学生对班级的many-to-one关系: ```java @Entity public class Class { @Id private Long id; @OneToMany(mappedBy =...

    Hibernate one-to-many-annotation

    在Hibernate中,`one-to-many`关系是常见的实体间关系之一,表示一个实体可以与多个其他实体相关联。本文将深入探讨`Hibernate one-to-many`注解的使用和实现细节。 ### 一、`@OneToMany`注解概述 `@OneToMany`...

    Hibernate-one-to-many

    本文将深入探讨Hibernate中一对多(One-to-Many)关系的处理方式,特别是通过外键映射和inverse属性的应用场景。 #### 一对多关系概念 一对多关系在数据库设计中非常常见,它指的是一个实体可以与多个其他实体关联...

    hibernate many-to-one(多对一)及 cascade(级联).doc

    综上所述,`many-to-one` 和 `cascade` 是Hibernate中非常重要的概念,它们能够帮助开发者更高效地管理实体之间的关系。然而,在实际应用中,需要根据具体的业务需求和场景来合理选择和配置这些功能,避免不必要的...

    Hibernate应用例子many-to-many

    本示例将详细讲解如何在Hibernate中实现多对多(many-to-many)的关系映射。 在数据库设计中,多对多关系是指两个实体之间存在多个关联,比如学生和课程的关系,一个学生可以选修多门课程,一门课程也可以被多个...

    Hibernate one to many(many to one) 配置

    标题"Hibernate one to many(many to one) 配置"涉及到的是关系型数据库在Java中的持久化框架Hibernate中的两种关联映射关系:一对一(One-to-One)和多对一(Many-to-One)。在数据库设计中,这种关系很常见,例如...

    Hibernate实现many-to-many的映射关系

    在本文中,我们将深入探讨如何使用Hibernate来实现多对多(many-to-many)的映射关系。 首先,多对多映射关系通常涉及到两个实体类之间的关联,例如在学生选课的例子中,学生(Student)和课程(Course)之间存在多...

    Hibernate Mapping Many-to-One 实例 内附源代码及附件下载

    通过研究这个例子,你可以更深入地理解如何在实际开发中设置和使用Many-to-One关系。 总的来说,Hibernate的Many-to-One映射简化了数据库关系的处理,使得开发者可以专注于业务逻辑,而不是繁琐的SQL操作。通过这个...

    hibernate对象三状态及OneToOne&OneToMany&ManyToMany

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本篇将详细阐述Hibernate中的对象三状态、一对一(OneToOne)、一对多...

    Hibernate性能调优

    - 双向`many-to-one`关联的例子,比如麻将桌上的玩家位置与玩家之间的关系。 #### 三、`one-to-one`关联管理 `one-to-one`关联主要用于表示两个实体之间的一对一关系。 - **定义**:`one-to-one`关联表示两个实体...

    hibernate关系映射

    这种关系在Hibernate中使用`&lt;one-to-many&gt;`和`&lt;set&gt;`标签来表示: ```xml &lt;!-- 其他属性省略 --&gt; &lt;set name="employees" table="EMP" cascade="save-update"&gt; &lt;key column="DEPTNO"&gt;&lt;/key&gt; &lt;one-to-many class...

    hibernate_1700_one2many_many2one_bi_crud(5)

    标题中的“hibernate_1700_one2many_many2one_bi_crud(5)”指的是一项关于Hibernate框架的教程,重点在于介绍一对多(One-to-Many)和多对一(Many-to-One)双向关联关系的创建、读取、更新和删除(CRUD)操作。...

    Hibernate关系映射 收藏

    &lt;many-to-one name="room" class="cn.jjm.hibernate.Room" column="ROOMID" /&gt; ``` 这表明`User`类的`room`属性对应数据库中的`ROOMID`列,该列存储了指向`Room`表的外键。 2. 一对多(One-to-Many) 一对多关系是...

    hibernate 关联映射(一) many to one

    &lt;/many-to-one&gt; &lt;!-- ... --&gt; &lt;/hibernate-mapping&gt; ``` 这里,`name`属性对应实体类中的属性名,`class`属性指定了关联实体的全限定类名,`fetch`属性可以设置为“join”以启用级联加载,而`column`元素则定义...

    hibernate表关联关系

    ### Hibernate表关联关系详解 ...综上所述,无论是`many-to-many`还是`one-to-one`关联关系,在Hibernate中都可以通过相应的配置文件来实现。正确地理解和配置这些关联关系对于构建高效、可扩展的应用程序至关重要。

    Hibernate关联关系映射目录

    &lt;many-to-one name="address" column="addressId" unique="true"/&gt; &lt;/hibernate-mapping&gt; ``` --- ##### 2. 一对一主键单向关联 在一对一主键单向关联中,两个实体共享同一个主键。这种方式通常用于当两个实体...

    Hibernate关联关系配置

    1. **一对一关系**: 一对一关系在Hibernate中可以通过`&lt;one-to-one&gt;`元素来定义。例如,一个用户可能只关联一个地址信息,反之亦然。 2. **多对多关系**: 多对多关系是指两个实体之间可以互相拥有多个实例。在...

Global site tag (gtag.js) - Google Analytics