hibernate复习(四)

cascade 属性

cascade  表示级联操作  【可以设置到一的一方或多的一方】

none                 不级联操作, 默认值

save-update     级联保存或更新

delete                级联删除

save-update,delete    级联保存、更新、删除

all                               同上。级联保存、更新、删除

 

多对多映射

项目-----开发人员(多对多)

public class Developer {
	private int d_id;
	private String d_name;

	// 开发人员,参数的多个项目
	private Set<Project> projects = new HashSet<Project>();
}




public class Project {
	private int prj_id;
	private String prj_name;

	// 项目下的多个员工
	private Set<Developer> developers = new HashSet<Developer>();
}

Project.hbm.xml    映射文件

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

<hibernate-mapping package="com.zc.c">
	
	<class name="Project" table="t_project">
		<id name="prj_id">
			<generator class="native"></generator>
		</id>	
		<property name="prj_name" length="20"></property>
		<!-- 
			多对多映射:
			1.  映射的集合属性: “developers”
			2.  集合属性,对应的中间表: “t_relation”
			3. 外键字段:  prjId
			4. 外键字段,对应的中间表字段:  did
			5.   集合属性元素的类型
               多对多必须设置级联操作!!!!或者只设置单方关联
		 -->
		 <set name="developers" table="t_relation" cascade="save-update">
		 	<key column="prjId"></key>
		 	<many-to-many column="did" class="Developer"></many-to-many>
		 </set>
		 
	</class>
</hibernate-mapping>

Developer.hbm.xml    映射文件

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

<hibernate-mapping package="cn.itcast.c_many2many">
	
	<class name="Developer" table="t_developer">
		<id name="d_id">
			<generator class="native"></generator>
		</id>	
		<property name="d_name" length="20"></property>
		
		<!-- 
			多对多映射配置: 员工方
				name  指定映射的集合属性
				table 集合属性对应的中间表
				key   指定中间表的外键字段(引用当前表t_developer主键的外键字段)
				many-to-many
					column 指定外键字段对应的项目字段
					class  集合元素的类型
		 -->
		<set name="projects" table="t_relation">
			<key column="did"></key>
			<many-to-many column="prjId" class="Project"></many-to-many>
		</set>		 
	</class>
</hibernate-mapping>

 

维护关联关系

设置inverse属性,在多对多种维护关联关系的影响?

1) 保存数据

    有影响。

    inverse=false ,有控制权,可以维护关联关系; 保存数据的时候会把对象关系插入中间表;

    inverse=true,  没有控制权, 不会往中间表插入数据。

2) 获取数据

   无。

3) 解除关系

    有影响。

    inverse=false ,有控制权, 解除关系就是删除中间表的数据。

    inverse=true, 没有控制权,不能解除关系。

4) 删除数据

    有影响。

    inverse=false, 有控制权。 先删除中间表数据,再删除自身。

    inverse=true, 没有控制权。 如果删除的数据有被引用,会报错! 否则,才可以删除

猜你喜欢

转载自blog.csdn.net/quge_name_harder/article/details/86572999