Hibernate-mapping(一)级联删除

    Hibernate作为数据访问层,它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(***.hbm.xml)把JAVA对象或PO(PersistentObject,持久化对象)映射到数据库中的数据库,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作。

    第一个配置文件hibernate.properties我没有用过,现在Hibernate一般是交给Spring管理,多用applicationContex.xml配置文件管理。

    第二个(***.hbm.xml)文件,它是hibernate与数据库的对象关系映射文件。结合具体实例,分析实体间的关系,在配置文件中是如何体现的吧。

    一般说来,一个(***.hbm.xml)文件,代表了一个实体Model类和一个数据库table的关联,如下:

<span style="font-size:18px;"><hibernate-mapping>
	<class name="myShop.category.vo.Category" table="category">
	</class>
</hibernate-mapping>
</span>

    这表明class类myShop.category.vo.Category对应表category;

    现在有另外一个类CategorySecond,它和Category类是多对一的关系:

  Hibernate-mapping(一)级联删除_第1张图片

Category.hbm.xml配置文件 

<span style="font-size:18px;"><hibernate-mapping>
	<class name="myShop.category.vo.Category" table="category">
		<!-- 主键的生成策略 -->
		<id name ="cid">
			<generator class="native"/>			
		</id>
		
		<property name="cname"/>
		<!-- 配置二级分类的集合 -->
		<set order-by="csid" name="categorySeconds" lazy="false" inverse="true" cascade="delete">
			<key column="cid"/>
			<one-to-many class="myShop.categorysecond.vo.CategorySecond"/>
		</set>
	</class>
</hibernate-mapping>
</span>


CategorySecond.hbm.xml配置文件

<span style="font-size:18px;"><hibernate-mapping>
	<class name="myShop.categorysecond.vo.CategorySecond" table="categorysecond">
		<id name="csid">
			<generator class="native"/>
		</id>
		
		<property name="csname"/>
		<!-- 二级分类与一级分类的关联 -->
		<many-to-one name="category" lazy="false" class="myShop.category.vo.Category" column="cid"></many-to-one>                                                                                       
	</class>
</hibernate-mapping>
</span>


    结合上述2个配置文件,分析Hibernate-mapping配置文件。

    在“一”的一方,配置文件中将会配置set节点信息:

     Lazy:默认是true使用延迟加载,false表示不延迟加载(即时加载);

     Order-by:一的一方set集合内多的一方实体集合的排序方式默认是主键排序 但可以更改;

     Inverse:反转。True表示由对方负责控制,false表示由自己控制。true可以减少update语句,提高性能。

     Cascade:是否使用级联操作;属性值:

       all:所有情况下均进行关联操作,即save-update和delete。

       none:所有情况下均不进行关联操作。这是默认值。

       save-update:在执行save/update/saveOrUpdate时进行关联操作。

       delete: 在执行delete时进行关联操作。

       all-delete-orphan:当一个节点在对象图中成为孤儿节点时,删除该节点。比如在一个一对多的关系中,Student包含多个book,当在对象关系中删除一个book时,此book即成为孤儿节点。      


    如果想要实现级联删除,只需配置“一”的一方的set节点: inverse="true"cascade="delete",这样删除“一”的一方后,在多的一方中引用到一的一方的主键的全部记录也会被删除。



你可能感兴趣的:(Hibernate-mapping(一)级联删除)