`
houzhe11
  • 浏览: 143266 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

一个完整的hibernate的one-to-many的例子

阅读更多
前段时间一直在研究hibernate的one-to-many,看了不少资料也在本论坛上求教过,但由于本人对Hibernate研究的时间不是很长,所以花了不少时间和精力.昨天终于弄出来了,现在与大家分享,希望对初学者有帮助!

1、设置数据库,本人使用的数据库是Oracle 9i
   设置hibernate.properties
   ## Oracle

   hibernate.dialect net.sf.hibernate.dialect.Oracle9Dialect
   #hibernate.dialect net.sf.hibernate.dialect.OracleDialect
   hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
   hibernate.connection.username sa
   hibernate.connection.password sa
   hibernate.connection.url jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:myoracle

2、假设一个用户可以同时有几个帐户,能通过帐户对应到用户,即为一个双向的one-to-many.这是引用我在论坛上发表的文章的回复,很谢谢geniouc给我的参考。

3、javaBean: customer & account
 

   1.   public class Customer {
   2.   private String cid;
   3.   private String custName;
   4.   private Set accounts= new HashSet();
   5.
   6.   public Customer(){
   7.   }
   8.   public String getCid() {
   9.     return cid;
  10.   }
  11.   public void setCid(String cid) {
  12.     this.cid = cid;
  13.   }
  14.   public String getCustName() {
  15.     return custName;
  16.   }
  17.   public void setCustName(String custName) {
  18.     this.custName = custName;
  19.   }
  20.
  21.   public Set getAccounts(){
  22.      return accounts;
  23.   }
  24.
  25.   public void setAccounts(Set accounts){
  26.      this.accounts = accounts;
  27.   }
  28.
  29. }
  30.
  31.   public class Account {
  32.   private long aid;
  33.   private String accNumber;
  34.   private Customer customer;
  35.
  36.   public Account(){
  37.   }
  38.   public long getAid() {
  39.     return aid;
  40.   }
  41.   public void setAid(long aid) {
  42.     this.aid = aid;
  43.   }
  44.   public String getAccNumber() {
  45.     return accNumber;
  46.   }
  47.   public void setAccNumber(String accNumber) {
  48.     this.accNumber = accNumber;
  49.   }
  50.
  51.   public Customer getCustomer(){
  52.      return customer;
  53.   }
  54.
  55.   public void setCustomer(Customer customer){
  56.      this.customer = customer;
  57.   }
  58. }



4、xml配置文件中:(关系的建立)
Account.hbm.xml

   1. <?xml version="1.0"?>
   2. <!DOCTYPE hibernate-mapping
   3.     PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
   4.     "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
   5. <hibernate-mapping>
   6.     <class name="one2many.Account" table="Account">
   7.         <id name="aid" type="long" column="aid" unsaved-value="0">
   8.             <generator class="increment"/>
   9.         </id>
  10.         <property name="accNumber" type="string"/>
  11.         <many-to-one name="customer" column="cidForCustomer"/>
  12.     </class>
  13. </hibernate-mapping>


Customer.hbm.xml

   1. <?xml version="1.0"?>
   2. <!DOCTYPE hibernate-mapping
   3.     PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
   4.     "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
   5. <hibernate-mapping>
   6.     <class name="one2many.Customer" table="Customer">
   7.     <id name="cid" type="string" column="cid">
   8.             <generator class="assigned"/>
   9.         </id>
  10.     <property name="custName" type="string"/>       
  11.
  12.      <set name="accounts" lazy="true" inverse="true" cascade="all" >
  13.      <key column="cidForCustomer"/>
  14.      <one-to-many class="one2many/Account"/>
  15.      </set>
  16.
  17.     </class>
  18. </hibernate-mapping>


5、测试程序,Test.java

   1. package one2many;
   2.
   3. import net.sf.hibernate.*;
   4. import net.sf.hibernate.cfg.*;
   5.
   6. public class Test {
   7. public static void main(String[] args) throws HibernateException {
   8.
   9.      Configuration conf= new Configuration();
  10.      conf.addClass(Account.class);
  11.      conf.addClass(Customer.class);
  12.      SessionFactory sessionFactory = conf.buildSessionFactory();
  13.
  14.      Customer cust = new Customer();
  15.      cust.setCid("aa");
  16.      cust.setCustName("Kelvin");
  17.
  18.      Account acc = new Account();
  19.      acc.setAccNumber("acc");
  20.      acc.setCustomer(cust);
  21.
  22.      Account acc1 = new Account();
  23.      acc1.setAccNumber("acc1");
  24.      acc1.setCustomer(cust);
  25.
  26.      cust.getAccounts().add(acc);
  27.      cust.getAccounts().add(acc1);
  28.
  29.      Session session = sessionFactory.openSession();
  30.      Transaction tx= session.beginTransaction();
  31.      session.save(cust);
  32.
  33.      tx.commit();
  34.      session.close();
  35.
  36.      sessionFactory.close();
  37.  }
  38. }
分享到:
评论

相关推荐

    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 many-to-one(多对一)及 cascade(级联).doc

    其中,`many-to-one`(多对一)关系是较为常见的一种,它指的是一个实体可以对应另一个实体中的多个实例。 #### 代码示例解析 在提供的代码示例中,定义了两个实体类:`User` 和 `Group`,其中 `User` 与 `Group` ...

    Hibernate-one-to-many

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

    Hibernate应用例子many-to-many

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

    Hibernate one to many(many to one) 配置

    Many-to-One是另一个常见的关联类型,它表示多个实体可以关联到一个单一的实体。例如,员工与部门的关系,多个员工可以属于同一个部门,但每个部门只有一个实体表示。在Hibernate中,使用`@ManyToOne`注解来标记这...

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

    本实例将详细讲解如何在Hibernate中实现Many-to-One关系映射,这是一种常见的数据库关联,表示一个实体可以与多个其他实体相关联。 在Many-to-One关系中,通常一个实体(如部门)可以有多个相关实体(如员工),而...

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

    首先,多对多映射关系通常涉及到两个实体类之间的关联,例如在学生选课的例子中,学生(Student)和课程(Course)之间存在多对多的关系,一个学生可以选择多门课程,一门课程也可以被多个学生选择。在数据库层面,...

    hibernate 3.5.0-final core reference 中文pdf

    - **多对一(many-to-one)**:解释了如何实现多对一的关联关系。 - **一对一**:介绍了两种实现一对一关联的方式:共享主键和外键。 - **自然ID(natural-id)**:解释了如何使用自然ID(通常是指业务意义上的唯一...

    hibernate 关联映射(一) many to one

    在数据库设计中,Many to One是一种常见的关系,即一个实体(表)可以与多个其他实体相关联,而另一个实体则只与一个实体相关联。 首先,我们需要理解Hibernate的实体类和映射文件。实体类是Java对象,它们代表...

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

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

    hibernate_1700_one2many_many2one_bi_crud(5)

    在压缩包中的“hibernate_1400_one2many_many2one_uni”文件可能包含了关于单向一对多(One-to-Many)和多对一关联的例子。单向关联只在一个方向上有引用,而双向关联在两个方向上都有引用。 为了实现这些关联,...

    Hibernate性能调优

    `many-to-one`关联是另一个重要的关联类型,在Hibernate中,它通常用来表示外键存储方向。 - **定义**:`many-to-one`关联意味着多个实体可以指向同一个实体。 - **示例**:如学生与教师之间的关联。 - **注意点**...

    hibernate例子。一对一,一对多,多对多

    描述中的"包含了jar包,单元测试,mysql数据库脚本"意味着这个压缩包包含了一个完整的开发环境,包括运行Hibernate所需的库文件(jar包),用于验证代码正确性的单元测试,以及与MySQL数据库交互的脚本。这对于初学...

    hibernate关系映射

    在`Student`类中,`&lt;set&gt;`标签定义了一个名为`courses`的集合,`&lt;many-to-many&gt;`标签则指明了与`Course`类的多对多关系。同样,`Course`类中也需要有相应的多对多关系定义。 ### 总结 Hibernate通过其强大的映射...

    Hibernate关系映射 收藏

    在上面的例子中,多个学生(`User`)可以住在同一个寝室(`Room`)。在Java类中,`User`有一个`Room`属性,表示用户所属的寝室。在`User.hbm.xml`映射文件中,我们需要定义这个引用关系: ```xml &lt;many-to-one name...

    Hibernate 一对一,一对多,多对多例子

    - Hibernate_1to_many_2:这是关于一对多关联的示例,一个实体可以与多个其他实体相关联,例如一个部门可以有多个员工。 - Hibernate_1to1_pk2:这可能涉及使用主键外键实现一对一关联的示例。 - Hibernate_1to_many...

    hibernate一对多例子

    在数据库设计中,一对多(One-to-Many)是一种常见的关联方式,指的是一个表中的记录可以与另一个表中的多个记录建立联系。例如,在学生与书籍的关系中,一个学生可以拥有多本书籍,但每本书籍只能属于一个学生。...

Global site tag (gtag.js) - Google Analytics