java - hibernate 多对一删除 child 时删除所有 parent

标签 java hibernate orm cascade many-to-one

我有 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/

相关文章:

java - 如何让 Hibernate JPA 自动管理列表索引?

java - em.persist 似乎不会在 postgreSQL 数据库上保留数据

java - java项目和jar文件中的多个包

java - 一个线程安全的最终一致性计数器

java - 如何解决由于继承类而导致的org.hibernate.MappingException

java - 无锁执行 Select HQL?

java - 如何同时迭代两个对象集合?

java - SwingUtilities.invokeLater()

c# - Linq 2 Sql插入没有关系

python - 任何 Python ORM 都充分利用了 NoSQL 的无模式功能吗?