inverse属性:

inverse主要用在一对多和多对多双向关联上,inverse可以被设置到集合标签<set>上,默认inverse为false,所以我们可以从"一"一端和"多"一端维护关联关系,如果设置成inverse为true,则我们只能从多一端来维护关联关系。

inverse属性,只影响数据的存储,也就是持久化。

一个用户可能拥有多个角色(user-->role)

package com.jonsion.hibernate;
public class Role {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.jonsion.hibernate;
import java.util.Set;
public class User {
private int id;
private String name;
private Set roles;
public Set getRoles() {
return roles;
}
public void setRoles(Set roles) {
this.roles = roles;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="com.jonsion.hibernate.Role">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="com.jonsion.hibernate.User">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="roles" table="t_user_role">
<key column="userid"/>
<many-to-many class="com.jonsion.hibernate.Role" column="roleid"/>
</set>
</class>
</hibernate-mapping>
package com.jonsion.hibernate;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import junit.framework.TestCase;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class Many2ManyTest extends TestCase{
public void testSave1(){
Session session=null;
Transaction tx=null;
try{
session=HibernateUtils.getSession();
tx=session.beginTransaction();
Role r1=new Role();
r1.setName("大堂经理");
session.save(r1);
Role r2=new Role();
r2.setName("出纳");
session.save(r2);
Role r3=new Role();
r3.setName("业务员");
session.save(r3);
User user1=new User();
user1.setName("阿希");
Set r1role=new HashSet();
r1role.add(r1);
r1role.add(r2);
user1.setRoles(r1role);
User user2=new User();
user2.setName("阿雅");
Set r2role=new HashSet();
r2role.add(r2);
r2role.add(r3);
user2.setRoles(r2role);
User user3=new User();
user3.setName("阿杜");
Set r3role=new HashSet();
r3role.add(r1);
r3role.add(r2);
r3role.add(r3);
user3.setRoles(r3role);
session.save(user1);
session.save(user2);
session.save(user3);
tx.commit();
}catch(Exception ex){
ex.printStackTrace();
tx.rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
public void testLoad1(){
Session session=null;
Transaction tx=null;
try{
session=HibernateUtils.getSession();
tx=session.beginTransaction();
User user=(User)session.load(User.class, 3);
System.out.println(user.getName());
for(Iterator it=user.getRoles().iterator();it.hasNext();){
Role role=(Role)it.next();
System.out.println(role.getName());
}
tx.commit();
}catch(Exception ex){
ex.printStackTrace();
tx.rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
}
posted on 2011-02-18 21:32  魔战  阅读(190)  评论(0编辑  收藏  举报