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
 
 
 
 
 
 
 
 
 
 
 
 
 


 
 
 
 
 
 
 
 
 
 
 


 
 
 
 
 
 
 
 
 
 
 


 
 
 
 
 
 
 
 
 
 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值