本文主旨,不使用联合主键映射为单独的类。而采用主键自动生成。闲话少说,进入正题:
本文需要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