При переходе в спящий режим многие к одному удаляются все родители при удалении ребенка - PullRequest
2 голосов
/ 24 января 2010

У меня есть объекты 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>

1 Ответ

1 голос
/ 24 января 2010

Предоставленное отображение выглядит нормально. Фактически, выполняя следующий код, используя точно ваше отображение:

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

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

session.getTransaction().commit();

Создает следующий вывод:

...
Hibernate: select state0_.STATE_NAME as STATE1_1_0_, state0_.STATE_CODE as STATE2_1_0_, state0_.COUNTRY as COUNTRY1_0_ from STATE state0_ where state0_.STATE_NAME=?
Hibernate: delete from STATE where STATE_NAME=?
3270 [main] INFO org.hibernate.impl.SessionFactoryImpl - closing

Все работает, как и ожидалось, мои страны все еще там.

Может, показать какой-нибудь код?

...