Hibernate的对象关系映射(4)

2.2 关系映射

 级联(cascade),取值有:all、none、save-update、delete。其中all表示在所有的情况下都进行级联操作;none表示在所有的情况下都不进行级联操作;save-update代表在执行保存更新时进行级联操作;delete表示在delete操作时进行级联操作。

2.2.1 一对一(one-to-one)

例如product和image之间的一对一关系映射如下所示。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<hibernate-mapping>
    
<class name="com.weportal.order.Product"  table="PRODUCT">
        
<synchronize table="ORDERITEM"/>
        
<synchronize table="CUSTOMERORDER"/>    

        
<id name="id">
            
<generator class="native"/>
        
</id>
        
<property name="name"/>
        
<property name="description"/>
        
<property name="price" column="PRICE"/>        

        
<property name="numberAvailable"></property>
        
<one-to-one
            
name="photo"
            class
="com.weportal.imageserver.Image"
            cascade
="all"
            outer-join
="true"
            constrained
="true"
            foreign-key
="photoId"
        
/>

    
</class>
</hibernate-mapping>

image的映射文件如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<hibernate-mapping>
    
<class name="com.weportal.imageserver.Image" dynamic-update="true">
        
<id name="id">
            
<generator class="native"/>
        
</id>
        
<property name="name" column="NAME" />
        
<property name="value" column="VALUE" length="1000000"/>
    
</class>
</hibernate-mapping>

2.2.2 多对一(many-to-one)

从持久化的角度来说,是一个类的多个实例对应另一个类的一个实例。

例如:computer和programmer之间是多对一的关系。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<hibernate-mapping package="com.weportal.manytoone">
    
<class name="Programmer" table="Programmer">
        
<id name="programmerId">
            
<generator class="hilo"></generator>
        
</id>
        
<property name="name"></property>
        
<property name="sex"></property>
        
<property name="age"></property>
        
<property name="tel"></property>
    
</class>
    
<class name="PersonalComputer" table="PCS">
        
<id name="computerId">
            
<generator class="hilo"></generator>
        
</id>
        
<property name="cpu"></property>
        
<property name="memory"></property>
        
<property name="harddisk"></property>
        
<many-to-one name="owner" column="programmerId" class="Programmer"></many-to-one>
    
</class>
    
</hibernate-mapping>

从另一方面看,programmer和computer之间是一对多的关系,映射文件如下。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<hibernate-mapping package="com.weportal.manytoone">
    
<class name="Programmer" table="Programmer">
        
<id name="programmerId">
            
<generator class="hilo"></generator>
        
</id>
        
<property name="name"></property>
        
<property name="sex"></property>
        
<property name="age"></property>
        
<property name="tel"></property>
        
<set name="computers" inverse="true" cascade="all">
            
<key column="programmerId"></key>
            
<one-to-many class="PersonalComputer"/>
        
</set>
    
</class>
    
<class name="PersonalComputer" table="PCS">
        
<id name="computerId">
            
<generator class="hilo"></generator>
        
</id>
        
<property name="cpu"></property>
        
<property name="memory"></property>
        
<property name="harddisk"></property>
        
<many-to-one name="owner" column="programmerId" class="Programmer"></many-to-one>
    
</class>
</hibernate-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值