hibernate 学习二——多对一关系(ManyToOne)

 

 举一个很简单的例子,我们经常会在一些论坛中看到关于用户角色的管理,那么,可以有很多User(用户)来对应一个Rose(角色),这样,就形成了多对一关系。

在这个例子中,我们开始使用hibernate3.6系列的api,因为,技术现在不停的更新中,尽管hibernate3.6的版本中可能会存在其他人说的bug之类的,但是,我们需要做的是规范化编程,严格按照api的规范来,逐步探究hibernate的使用

一、导入的jar文件

1、hibernate包

2、commons-logging包

3、commons-collections包

4、cglib包

5、asm包

6、asm-commons包

7、log4包

8、jta包

9、dom4j包

10、数据库的驱动包

11、javassist-3.12.0.GA包

12、slf4-api包

13、slf4-nop包

14、hibernate-jpa-2.0-api

二、在hibernate.cfg.xml中配置信息,参考上一篇中详细的描述

三、创建java实体bean——持久化类

Role.java类

public class Role {
    private int id;
    private String name;
    private Set users;
	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;
	}
	public Set getUsers() {
		return users;
	}
	public void setUsers(Set users) {
		this.users = users;
	}
}

User.java

public class User {

	private int id;
	
	private String name;
	
         //在持久化类中,将所依赖的Role封装为一个对象,在数据库中的值是Role的id
	private Role role;

	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;
	}

	public Role getRole() {
		return role;
	}

	public void setRole(Role role) {
		this.role = role;
	}
	
}

四、持久化类的配置文件

<class name="User" table="t_user" lazy="true">  
        <id name="id">  
            <generator class="native"></generator>  
        </id>  
        <property name="name" type="string" length="50"></property>  
        <!-- 用于配置多对一关系 ,在数据库中的字段名是roleid -->  
        <!-- cascade级联操作,持久化操作会从t_role表中级联到t_user表中 -->  
        <many-to-one name="role" column="roleid" cascade="all">  
        </many-to-one>  
    </class>  
    <class name="Role" table="t_role" lazy="true">  
        <id name="id">  
            <generator class="native"></generator>  
        </id>  
        <property name="name" type="string" length="50"></property>  
    </class>  

 

 
 五、测试程序代码 
Session session=HibernateTools.getSession();
session.beginTransaction();
//Transient
Role role=new Role();
role.setName("vip");
//Transient->Persistent
session.save(role);
User user1=new User();
user1.setName("张三三1");
user1.setRole(role);
User user2=new User();
user2.setName("张三三2");
user2.setRole(role);
//Persistent
session.save(user1);
session.save(user2);
session.getTransaction().commit();

 

六、双向多对一

以上是单向的多对一关系,现在看一下双向多对一关系,双向多对一和双一对多是完全相同的两种情况

<class name="User" table="t_user" lazy="true">
	<id name="id">
		<generator class="native"></generator>		
	</id>
	<property name="name" type="string" length="50"></property>
	<!-- 数据库底层通过在N的一方加一个外间约束来描述这种关系 -->
	<many-to-one name="role" column="roleid" cascade="all"></many-to-one>	
</class>
<class name="Role" table="t_role" lazy="true">
	<id name="id" length="20">
		<generator class="native"></generator>		
	</id>
	<property name="name" type="string" length="50"></property>
	<!-- 对于双向多对一的关系,同城不应该允许1的一段控制关联关系,而应该由N的一段来控制关联关系 此时,  在<set...>元素中指定inverse="true",用于指定1的一段不控制关联关系 -->
        <set name="users" inverse="true">
	    <key column="roleid"></key><!--装载一个集合,通过roleid进行关联 -->
	    <one-to-many class="User"/>
	</set>
</class>


 

 

以上是简单的程序,供大家测试

转载请注明出处 http://blog.csdn.net/di1nuli/article/details/7083800


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值