2

我有 Country 和 State 对象。我打算从国家到国家建立单向的多对一关系。我不想在我定义映射的国家/地区中存储对州的任何引用,如下所示。当我删除一个 State 对象时,所有国家都会被删除!

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class
        name="places.Country" 
        table="COUNTRY"  
        dynamic-update="true">

        <!-- Technical ID -->
        <id name="name" type="string" unsaved-value="new" column="COUNTRY_NAME">
        </id>

        <!-- Properties -->
        <property name="commonName" 
            column="COMMON_NAME"
        />
        <property name="iso2Code" 
            column="ISO2_CODE"
        />
        <property name="iso3Code" 
            column="ISO3_CODE"
        />
        <property name="isoNumeric" 
            column="ISO_NUMERIC"
        />
        <property name="ituCode" 
            column="ITU_CODE"
        />
        <property name="ianaCode" 
            column="IANA_CODE"
        />
    </class>
    <class
        name="places.State" 
        table="STATE"  
        dynamic-update="true">

        <!-- Technical ID -->
        <id name="name" type="string" unsaved-value="new" column="STATE_NAME">
        </id>

        <!-- Properties -->
        <property name="code" column="STATE_CODE"
        />

    <many-to-one name="country" column="COUNTRY" not-null="true" cascade="none" 
        class="places.Country"
    />        
    </class>

</hibernate-mapping>
4

1 回答 1

1

提供的映射看起来不错。实际上,完全使用您的映射执行以下代码:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();

State aState = (State) session.load(State.class, stateId);
session.delete(aState);

session.getTransaction().commit();

生成以下输出:

...
休眠:从STATE state0_中选择state0_.STATE_NAME作为STATE1_1_0_,state0_.STATE_CODE作为STATE2_1_0_,state0_.COUNTRY作为COUNTRY1_0_,其中state0_.STATE_NAME=?
休眠:从 STATE 中删除 STATE_NAME=?
3270 [main] INFO org.hibernate.impl.SessionFactoryImpl - 关闭

事情按预期进行,我的国家仍然存在。

也许显示一些代码?

于 2010-01-24T06:56:07.210 回答