Hibernate-02 框架第三天 测试代码

多对多的测试代码

  • 添加测试

/*
	 * 多对多的测试
	 */
	@Test
	public void m2m() {
		
		Session session = HibernateUtils.getCurrentSession();
		
		Transaction tr = session.beginTransaction();
		//创建两个user
		User u1 = new User();
		User u2 = new User();
		u1.setUsername("u1");
		u2.setUsername("u2");
		
		
		//创建两个角色
		Role r1 = new Role();
		Role r2 = new Role();
		r1.setRname("程序员");
		r2.setRname("PM");
		
		//设置关联
		u1.getRoles().add(r1);
		u1.getRoles().add(r2);
		
		u2.getRoles().add(r1);
		
		//保存设置了级联的方向
		session.save(u1);
		session.save(u2);
		
		
		tr.commit();
		
	}
	

表结构

  • 多对多关联修改、删除的测试
/*
	 * 多对多的删除关联测试
	 * 一般不会做直接删除操作,用操作中间表来处理。
	 */
	@Test
	public void m2mDU() {
		
		Session session = HibernateUtils.getCurrentSession();
		
		Transaction tr = session.beginTransaction();
	
		//查找user与role
		User u1 = session.get(User.class, 1L);
		User u2 = session.get(User.class, 2L);
		Role r1 = session.get(Role.class, 1L);
		Role r2 = session.get(Role.class, 2L);
		//删除id为1的role
		u1.getRoles().remove(r1);
		
		//为u2添加角色r2
		u2.getRoles().add(r2);
		
		tr.commit();
	}

操作后的结果

JavaBean 标准生成就可以

bean的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

	<!-- 配置类和表结构的映射 -->
	<class name="domain.User" table="sys_user">
		<!-- 配置id 
			见到name属性,JavaBean的属性
			见到column属性,是表结构的字段
		-->
		<id name="uid" column="uid">
			<!-- 主键的生成策略 -->
			<generator class="native"/>
		</id>
		<!-- 乐观锁,就使用version标签,暂时不适用 -->
		<!--<version name="version"/>-->
		<!-- 配置其他的属性 -->
		<property name="username" column="username"/>
		<property name="password" column="password"/>

		
		<!-- 多对多设置 -->
		<!-- cascade为级联操作
		    * none                       不使用级联
		    * save-update                级联保存或更新
		    * delete                     级联删除
		    * delete-orphan              孤儿删除.(注意:只能应用在一对多关系)
		    * all                        除了delete-orphan的所有情况.(包含save-update delete)
		    * all-delete-orphan          包含了delete-orphan的所有情况.(包含save-update delete delete-orphan)
		    save-update,delete,
		-->
		<!-- 
			多对多需要设置table属性,是中间表的名字 
			控制较多的一方设置级联保存,较少的一方设置放弃维护外键
			必须由一方放弃。
		-->
		<set name="roles" table="sys_user_role" cascade="save-update">
			<!-- 中间表中外键的名字 -->
			<key column="uid"/>
			<!-- class:关联的另一方的多的类全路径.column:另一方在中间表中的外键名称: -->
			<many-to-many class="domain.Role" column="rid" />
		</set>
	</class>
	
</hibernate-mapping> 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

	<!-- 配置类和表结构的映射 -->
	<class name="domain.Role" table="sys_role">
		<id name="rid" column="rid">
			<generator class="native"/>
		</id>
		<property name="rname" column="rname"/>
		<!-- 
			多对多需要设置table属性,是中间表的名字 
			控制较多的一方设置级联保存,较少的一方设置放弃维护外键
			必须由一方放弃。
		-->
		<set name="users" table="sys_user_role" inverse="true">
			<!-- 中间表中外键的名字 -->
			<key column="rid"/>
			<!-- class:关联的另一方的多的类全路径.column:另一方在中间表中的外键名称: -->
			<many-to-many class="domain.User" column="uid" />
		</set>
	</class>
	
</hibernate-mapping> 

主配置文件中不要忘记加载配置文件

		<mapping resource="domain/User.hbm.xml"/>
		<mapping resource="domain/Role.hbm.xml"/>

猜你喜欢

转载自blog.csdn.net/alexzt/article/details/81779202