读书人

一对多投射配置文件hbm.xml以及级联

发布时间: 2013-11-20 12:46:02 作者: rapoo

一对多映射配置文件hbm.xml以及级联
有两个类, 一个是User, 一个是Order
一个User可以包含多个Order对象。

package com.lj.zhang;import java.util.Set;public class User{private int id;private String name;//一对多, 通过该变量可以引用到对应的Order集合对象private Set<Order>orders; public Set<Order> getOrders(){return orders;}public void setOrders(Set<Order> orders){this.orders = orders;}public User(int id, String name){super();this.id = id;this.name = name;}public User(){// TODO Auto-generated constructor stub}}package com.lj.zhang;public class Order{@Idprivate int id;private String name;//多对一, 多个order通过引用可以对应到关联的User对象。private User user;public User getUser(){return user;}public void setUser(User user){this.user = user;}}


==============级联==========
假如有一个User对象user1, 对应有三个Order对象order1,order2,order3
当保存user1时, 按照道理, 这三个Order对象也会被保存起来。
在上面的例子中, 通过
<set name="orders" cascade="save-update" inverse="true">
来设置这个关联。 inverse=true表示由order来维持这个关系。

cascade表示当User进行何种操作的时候, 会关系到对应的set对象。
这里设置的是"save-update",也就是当添加user的时候, 与user对象对应的,
也就是user对象所包含的order对象也会被加入到数据库中, 并与该user对象关联。

但是如果设置成none, 那不管user.setOrder()这里设置进去多少order, 最后都
不会被存入数据库。 被存入数据库的最终就只有user自己。
==============级联==========



<?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 package="com.lj.zhang">  <class name="Order" table="test_order">  <id name="id">  <generator column="test_name"/>      <!-- 告诉hibernate, 多对一映射的对象是什么类型的 -->  <!-- 这里的column对应的是User.hbm.xml里的set里面的key column   告诉hibernate这个对象所对应的user的foreign key  --><many-to-one name="user" column="customer_id"></many-to-one>    </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 package="com.lj.zhang">  <class name="User" table="test_user">  <id name="id">  <generator type="string" length="40" column="test_name"/>             <!-- 配置一对多关系要用到set节点   name属性是User类中的属性名称  one-to-many里的class属性告诉了hibernate对应的类, 这样  才可以通过反射生成对象  -->  <set name="orders" cascade="save-update" inverse="true">    <!-- 级联, inverse=true表示由多的一方维持关联关系 -->  <!-- key的column告诉hibernate多的一方的foreign key -->  <!--  这里设置为customer_id, 就会在数据库的order表里生成相应的 -->  <key column="customer_id"></key>  <one-to-many name="code">public class DefaultFlushEntityEventListener implements FlushEntityEventListener {public void onFlushEntity(FlushEntityEvent event) throws HibernateException {final Object entity = event.getEntity();final EntityEntry entry = event.getEntityEntry();final EventSource session = event.getSession();final EntityPersister persister = entry.getPersister();final Status status = entry.getStatus();final Type[] types = persister.getPropertyTypes();final boolean mightBeDirty = entry.requiresDirtyCheck(entity);final Object[] values = getValues( entity, entry, mightBeDirty, session );





读书人网 >XML SOAP

热点推荐