我有 Country 和 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>
最佳答案
提供的映射看起来不错。实际上,完全使用您的 映射执行以下代码:
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
一切按预期进行,我的国家还在那里。
也许显示一些代码?
关于java - hibernate 多对一删除 child 时删除所有 parent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2126126/