`
davexin
  • 浏览: 39094 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hibernate常用一对一、一对多、多对一、多对多映射关系真实例子(华南银行项目)

阅读更多

本文主旨,不使用联合主键映射为单独的类。而采用主键自动生成。闲话少说,进入正题:

本文需要4张表,演示hibernate的一对一,一对多,多对一,多对多关系。

表名字如下, T_user, role , userrole,  T_group, 其中T_user与T_group为一对一关系,T_user与role 为多对多关系,通过userrole表关联,userrole表中除了有T_user, role 的关联列外,还有一个自己表的主键,这是我设计其他人不同的地方。

配置文件分别如下:

1。T_user

<!---->
<!----> "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!---->
<hibernate-mapping></hibernate-mapping>
    <class name="com.demo.domain.T_user" table="T_USER" schema="DB2ADMIN"></class>   
     <id name="id" type="integer"></id>
        <column name="ID"></column>
        <generator class="identity"></generator>
            
   <property name="name" type="string">
       <column></column>
     </property>
   <property name="age" type="integer">
       <column></column>
     </property>
     <!----> 
        <!---->
        <many-to-one name="group"></many-to-one>                    class="com.demo.domain.T_group"
                    column="GROUP_ID"
                    cascade="all"
                    unique="true"             
                    />
        <!---->
                   
        <key column="HNCBUSERKEY" not-null="true"></key>           
        <one-to-many class="com.demo.domain.Userrole"></one-to-many>   
       
     <!---->
         
           <key column="hncbuserkey"></key>   
           <many-to-many class="com.demo.domain.Role" column="rolekey"></many-to-many> 
         
       
        <!---->
        <!---->
   

2。role表

<!---->
<!----> "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!---->
<hibernate-mapping></hibernate-mapping>
    <class name="com.demo.domain.Role" table="ROLE" schema="DB2ADMIN"></class>   
     <id name="rolekey" type="integer"></id>
        <column name="ROLEKEY"></column>
        <generator class="identity"></generator>
            
   <property name="rolename" type="string">
       <column></column>
     </property>
   <property name="isadmin" type="integer">
       <column></column>
     </property>
   <property name="flowcontroltype" type="integer">
       <column></column>
     </property>
   <property name="notes" type="string">
       <column></column>
     </property>
   <property name="createdate" type="timestamp">
       <column></column>
     </property>
   <property name="upatedate" type="timestamp">
       <column></column>
     </property>
   <property name="version" type="integer">
       <column></column>
     </property>
   <property name="nullifyflag" type="integer">
       <column></column>
     </property>
       
        <!---->       
        <!---->
   

3。userrole表

<!---->
<!----> "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!---->
<hibernate-mapping></hibernate-mapping>
    <class name="com.demo.domain.Userrole" table="USERROLE" schema="DB2ADMIN"></class>   
     <id name="id" type="integer"></id>
        <column name="ID"></column>
        <generator class="identity"></generator>
    
     <!---->      
   <property name="hncbuserkey" type="integer">
       <column></column>
     </property>
       
   <property name="rolekey" type="integer">
       <column></column>
     </property>
       
       <!---->
       <many-to-one name="user"></many-to-one>                    class="com.demo.domain.T_user"
                    column="HNCBUSERKEY"
                    cascade="all"
                    unique="true"             
                    />
   

4。T_group表

<!---->
<!----> "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!---->
<hibernate-mapping></hibernate-mapping>
    <class name="com.demo.domain.T_group" table="T_GROUP" schema="DB2ADMIN"></class>   
     <id name="id" type="integer"></id>
        <column name="ID"></column>
         <generator class="identity"></generator>
            
   <property name="name" type="string">
       <column></column>
     </property>
       
                             class="com.demo.domain.T_user"
                      property-ref="group"
                     />
   

5。T_user.java

package com.demo.domain;

import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;
import java.util.Set;

public class T_user implements Serializable
{
    /********************************* properties *****************************/

 private int id;
 private String name;
 private int age;
 private int group_id;
 private T_group group;
 private Set roles = new HashSet();
 private Set userroles = new HashSet();

    /**
  * @return the userroles
  */
 public Set getUserroles() {
  return userroles;
 }

 /**
  * @param userroles the userroles to set
  */
 public void setUserroles(Set userroles) {
  this.userroles = userroles;
 }

 /**
  * @return the roles
  */
 public Set getRoles() {
  return roles;
 }

 /**
  * @param roles the roles to set
  */
 public void setRoles(Set roles) {
  this.roles = roles;
 }

 /**
  * @return the group
  */
 public T_group getGroup() {
  return group;
 }

 /**
  * @param group the group to set
  */
 public void setGroup(T_group group) {
  this.group = group;
 }

 /****************************** default construct**************************/

 public T_user()
 {
 } 
 
    /*********************************** method *******************************/
  
 /**
  * get id
  * @return id
  */
 public int getId()
 {
  return id;
 }
 
 /**
  * set id
  * @param id
  */
 public void setId( int id)
 {
  this.id = id;
 } 
 /**
  * get name
  * @return name
  */
 public String getName()
 {
  return name;
 }
 
 /**
  * set name
  * @param name
  */
 public void setName( String name)
 {
  this.name = name;
 } 
 /**
  * get age
  * @return age
  */
 public int getAge()
 {
  return age;
 }
 
 /**
  * set age
  * @param age
  */
 public void setAge( int age)
 {
  this.age = age;
 } 
 /**
  * get group_id
  * @return group_id
  */
 public int getGroup_id()
 {
  return group_id;
 }
 
 /**
  * set group_id
  * @param group_id
  */
 public void setGroup_id( int group_id)
 {
  this.group_id = group_id;
 } 


 
 
 6.  Role.java

package com.demo.domain;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;

public class Role implements Serializable
{
    /********************************* properties *****************************/

 private int rolekey;
 private String rolename;
 private int isadmin;
 private int flowcontroltype;
 private String notes;
 private Date createdate;
 private Date upatedate;
 private int version;
 private int nullifyflag;

    /****************************** default construct**************************/

 public Role()
 {
 } 
 
    /*********************************** method *******************************/
  
 /**
  * get rolekey
  * @return rolekey
  */
 public int getRolekey()
 {
  return rolekey;
 }
 
 /**
  * set rolekey
  * @param rolekey
  */
 public void setRolekey( int rolekey)
 {
  this.rolekey = rolekey;
 } 
 /**
  * get rolename
  * @return rolename
  */
 public String getRolename()
 {
  return rolename;
 }
 
 /**
  * set rolename
  * @param rolename
  */
 public void setRolename( String rolename)
 {
  this.rolename = rolename;
 } 
 /**
  * get isadmin
  * @return isadmin
  */
 public int getIsadmin()
 {
  return isadmin;
 }
 
 /**
  * set isadmin
  * @param isadmin
  */
 public void setIsadmin( int isadmin)
 {
  this.isadmin = isadmin;
 } 
 /**
  * get flowcontroltype
  * @return flowcontroltype
  */
 public int getFlowcontroltype()
 {
  return flowcontroltype;
 }
 
 /**
  * set flowcontroltype
  * @param flowcontroltype
  */
 public void setFlowcontroltype( int flowcontroltype)
 {
  this.flowcontroltype = flowcontroltype;
 } 
 /**
  * get notes
  * @return notes
  */
 public String getNotes()
 {
  return notes;
 }
 
 /**
  * set notes
  * @param notes
  */
 public void setNotes( String notes)
 {
  this.notes = notes;
 } 
 /**
  * get createdate
  * @return createdate
  */
 public Date getCreatedate()
 {
  return createdate;
 }
 
 /**
  * set createdate
  * @param createdate
  */
 public void setCreatedate( Date createdate)
 {
  this.createdate = createdate;
 } 
 /**
  * get upatedate
  * @return upatedate
  */
 public Date getUpatedate()
 {
  return upatedate;
 }
 
 /**
  * set upatedate
  * @param upatedate
  */
 public void setUpatedate( Date upatedate)
 {
  this.upatedate = upatedate;
 } 
 /**
  * get version
  * @return version
  */
 public int getVersion()
 {
  return version;
 }
 
 /**
  * set version
  * @param version
  */
 public void setVersion( int version)
 {
  this.version = version;
 } 
 /**
  * get nullifyflag
  * @return nullifyflag
  */
 public int getNullifyflag()
 {
  return nullifyflag;
 }
 
 /**
  * set nullifyflag
  * @param nullifyflag
  */
 public void setNullifyflag( int nullifyflag)
 {
  this.nullifyflag = nullifyflag;
 } 


 
 
 7.Userrole.java

package com.demo.domain;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;

public class Userrole implements Serializable
{
    /********************************* properties *****************************/

 private int id;
 private int hncbuserkey;
 private int rolekey;

 private T_user user;
    /****************************** default construct**************************/

 public Userrole()
 {
 } 
 
    /*********************************** method *******************************/
  
 /**
  * get id
  * @return id
  */
 public int getId()
 {
  return id;
 }
 
 /**
  * set id
  * @param id
  */
 public void setId( int id)
 {
  this.id = id;
 } 
 /**
  * get hncbuserkey
  * @return hncbuserkey
  */
 public int getHncbuserkey()
 {
  return hncbuserkey;
 }
 
 /**
  * set hncbuserkey
  * @param hncbuserkey
  */
 public void setHncbuserkey( int hncbuserkey)
 {
  this.hncbuserkey = hncbuserkey;
 } 
 /**
  * get rolekey
  * @return rolekey
  */
 public int getRolekey()
 {
  return rolekey;
 }
 
 /**
  * set rolekey
  * @param rolekey
  */
 public void setRolekey( int rolekey)
 {
  this.rolekey = rolekey;
 }

 /**
  * @return the user
  */
 public T_user getUser() {
  return user;
 }

 /**
  * @param user the user to set
  */
 public void setUser(T_user user) {
  this.user = user;
 } 


 
 
 8.T_group.java

package com.demo.domain;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;

public class T_group implements Serializable
{
    /********************************* properties *****************************/

 private int id;
 private String name;
 private T_user user;

    /**
  * @return the user
  */
 public T_user getUser() {
  return user;
 }

 /**
  * @param user the user to set
  */
 public void setUser(T_user user) {
  this.user = user;
 }

 /****************************** default construct**************************/

 public T_group()
 {
 } 
 
    /*********************************** method *******************************/
  
 /**
  * get id
  * @return id
  */
 public int getId()
 {
  return id;
 }
 
 /**
  * set id
  * @param id
  */
 public void setId( int id)
 {
  this.id = id;
 } 
 /**
  * get name
  * @return name
  */
 public String getName()
 {
  return name;
 }
 
 /**
  * set name
  * @param name
  */
 public void setName( String name)
 {
  this.name = name;
 } 


 

9.测试类

import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.demo.domain.Role;
import com.demo.domain.T_group;
import com.demo.domain.T_user;
import com.demo.domain.Userrole;

import junit.framework.Assert;
import junit.framework.TestCase;

public class TestHibernate extends TestCase {

 Session session = null;

 /* (non-Javadoc)
  * @see junit.framework.TestCase#setUp()
  */
 protected void setUp() {
  try {
   Configuration config = new Configuration().configure();
   SessionFactory sessionFactory = config.buildSessionFactory();
   session = sessionFactory.openSession();

  } catch (HibernateException e) {
   e.printStackTrace();
  }       
 }

 /* (non-Javadoc)
  * @see junit.framework.TestCase#tearDown()
  */
 protected void tearDown() throws Exception {
  try {
   session.close();       
  } catch (HibernateException e) {
   e.printStackTrace();
  }   
 }

 /**
  * 对象持久化测试(Insert方法)
  */       
 public void testInsert() {
  Transaction tran = null;
  try {

   T_user user = new T_user();
   user.setName("byf");
   user.setAge(new Integer(26));
            user.setGroup_id(1);
   
   T_group group = new T_group();
   //这一句在使用主键关联时,不可省略,否则另一个对象无法取得主键值(one-to-one主键关联时)
   //group.setUser(user);
   group.setName("Admin");

//   //如果在配置文件中没有cascade="all",就要先插入group信息
//   tran = session.beginTransaction();           
//   session.save(group);
//   session.flush();
//   tran.commit();

   tran = session.beginTransaction();                   
   //设置关联
   user.setGroup(group);
   
   Set userroles = new HashSet();
   Userrole userrole1 = new Userrole();
   userrole1.setHncbuserkey(user.getId());
   userrole1.setRolekey(101);
   Userrole userrole2 = new Userrole();
   userrole2.setHncbuserkey(user.getId());
   userrole2.setRolekey(102);
   userroles.add(userrole1);
   userroles.add(userrole2);
            user.setUserroles(userroles);           
           
   //插入user信息
   session.save(user);
   session.flush();
   tran.commit();
   Assert.assertEquals(user.getId()>0 ,true);


  } catch (HibernateException e) {
   e.printStackTrace();
   Assert.fail(e.getMessage());
   if(tran != null) {
    try {
     tran.rollback();
    } catch (Exception e1) {
     e1.printStackTrace();
    }
   }
  }
 }

    /**
     * 对象读取测试(Select方法)
     */           
    public void testSelect(){
        String hql = " from T_user where name='byf'";
        String hql2 = " from T_group where name='Admin'";
        try {
            List userList = session.createQuery(hql).list();
            T_user user = (T_user)userList.get(0);
            System.out.println("user id is " + user.getId());
            System.out.println("user name is " + user.getName());
            System.out.println("user group is " + user.getGroup().getName());
            System.out.println("user roles is " + user.getRoles().size());
            if(user.getRoles()!=null){
             Iterator it = user.getRoles().iterator();
             while(it.hasNext()){
                    Role role = (Role)it.next();
                 System.out.println("-------user role getRolename= " + role.getRolename());
                 System.out.println("-------user role getIsadmin= " + role.getIsadmin());

             }
             }
           
            System.out.println("--------------user userrole is " + user.getUserroles().size());
            if(user.getUserroles()!=null){
             Iterator it = user.getUserroles().iterator();
             while(it.hasNext()){
                    Userrole userrole = (Userrole)it.next();
                 System.out.println("-------userrole getHncbuserkey= " + userrole.getHncbuserkey());
                 System.out.println("-------userrole getRolekey= " + userrole.getRolekey());

             }
             }
           
            Assert.assertEquals(user.getName(), "byf");
           
            List groupList = session.createQuery(hql2).list();
            T_group group = (T_group)groupList.get(0);
            System.out.println("group name is " + group.getName());
            System.out.println("group user is " + group.getUser().getName());
            Assert.assertEquals(group.getUser().getName(), "byf");           
        } catch (Exception e) {
            e.printStackTrace();
            Assert.fail(e.getMessage());
        }
    }

}

以上代码可以运行,类包请自己下载, hibernate3.04, junit3.8

如果有人需要,请与我联系。  mail:  163davexin@163.com
 
 
 
 
 
 
 
 
 
 
 
 
 


 
 
 
 
 
 
 
 
 
 
 


 
 
 
 
 
 
 
 
 
 
 


 
 
 
 
 
 
 
 
 
 
 

  • src.rar (12.9 KB)
  • 下载次数: 69
分享到:
评论
1 楼 davexin 2007-07-30  
robbin该修改一下文本编辑器了,总是有些内容不能正常显示,影响显示,影响你的名誉,希望robbin看到后能够改进。
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    hibernate多对多关联映射

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系数据库模型映射方式,用于处理两个实体之间存在多个实例互相关联的情况。本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关...

    hibernate 映射关系学习入门 多对多实体映射

    本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...

    hibernate 映射关系学习入门 一对一映射

    在提供的压缩包`TestHiberOnetoOne`中,可能包含了使用Eclipse创建的Hibernate一对一映射关系的项目源码。你可以通过运行这个项目来更直观地理解一对一映射的工作原理,包括实体类的定义、配置文件的编写以及如何在...

    Hibernate双向一对一关联映射(注解版)

    本主题聚焦于“Hibernate双向一对一关联映射”的注解实现,这是一种高级的数据库设计模式,用于处理两个实体之间一对一的关系。 在Hibernate中,一对一关联映射分为单向和双向。单向一对一映射通常涉及一个实体持有...

    hibernate一对多项目

    本项目“hibernate一对多项目”旨在演示如何在JavaWeb应用中使用Hibernate处理一对多的关系映射。这里我们将深入探讨 Hibernate 的一对多关系、配置以及在实际项目中的应用。 首先,一对多关系在数据库中很常见,...

    hibernate(一对多,多对一映射)操作

    本文将深入探讨Hibernate中的一对多和多对一映射关系,并通过一个实际的demo演示它们在增删查改操作中的应用。 首先,我们要理解什么是数据库的关联关系。在数据库设计中,我们经常遇到一种情况,即一个实体可能与...

    Hibernate的一对一,一对多,多对多映射

    总结,Hibernate的一对一、一对多和多对多映射提供了灵活的数据模型设计,使得开发者可以方便地处理复杂的数据关系。理解并熟练运用这些映射关系,能极大地提高开发效率和代码质量。通过实际编程练习,可以更深入地...

    hibernate 一对多多对一的映射

    本教程将详细讲解如何使用Hibernate来实现MySQL数据库中的一对多和多对一的映射关系。 ### 一、Hibernate简介 Hibernate是一个开源的ORM框架,它通过XML配置文件或者注解将Java对象映射到关系数据库表,实现了对象...

    hibernate一对一映射例子

    在Java的持久化框架Hibernate中,一对一(One-to-One)映射是一种常见的关系映射方式,用于表示两个实体...记得在实际应用中,根据业务需求合理设计数据库关系,并适当地使用一对多、多对一、多对多等其他映射关系。

    hibernate一对多映射的例子

    // 使用@ManyToOne注解定义多对一关系 @ManyToOne @JoinColumn(name = "brand_id") private Brand brand; // getters and setters... } ``` 在上述代码中,`mappedBy`属性指示`CarModel`中的`brand`字段是...

    Hibernate一对多,多对一映射

    本主题将深入探讨Hibernate中的一对多和多对一映射关系,这两种关系在实际的业务场景中非常常见。 首先,我们来理解一下一对多映射(One-to-Many Mapping)。在数据库设计中,一对多关系意味着一个父记录可以与多...

    hibernate关联映射详解

    包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。

    hibernate学习入门一对多实体映射源码

    在这个“hibernate学习入门之一对多实体映射源码”教程中,我们将深入探讨如何在Hibernate中设置和管理一对多的关系。 一、Hibernate简介 Hibernate是Java开发人员用于处理数据库操作的强大工具,通过它,我们可以...

    hibernate关联映射详解SSH 多对多,一对多关系对象映射

    本篇文章将深入探讨Hibernate中的一对多和多对多关系映射。 首先,让我们理解一对多关联映射。在数据库中,一对多关系意味着一个表中的记录可以与另一个表中的多个记录相关联。在Hibernate中,这可以通过在实体类中...

Global site tag (gtag.js) - Google Analytics