Hibernate多应用程序环境。如果父项有多个子项,则删除一个子对象

时间:2014-08-19 12:45:54

标签: java hibernate struts cascade

Hibernate 4.1与XML映射,Struts 1.3,多应用程序环境共享同一个数据库。我们说我们有三张桌子:

Client          Car_Client           House_Client
------          ----------           ------------
id              client_id            client_id
name            date_purchased       date_purchased

3个映射文件:                                                                                                                                   

<hibernate-mapping>
    <joined-subclass name="CarClient" extends="Client" table="Car_Client">
        <key column="client_id" />
        <property name="datePurchased">
            <column name="date_purchased" />
        </property>
    </joined-subclass>
</hibernate-mapping>

<hibernate-mapping>
    <joined-subclass name="HouseClient" table="House_Client">
        <key column="client_id" />
        <property name="datePurchased">
            <column name="date_purchased" />
        </property>
    </joined-subclass>
</hibernate-mapping>

客户端是父对象,两个应用程序(Car和House)共享父表,但每个应用程序都有自己的父表子类来存储有关客户端的额外信息。每个Hibernate映射和Java类都在扩展父对象。

因此,在正常使用中,当Car应用程序删除CarClient时,父对象也会被删除,因为通常客户端只存在于一个应用程序中。但有时,两个应用程序中都可能存在客户端。从一个应用程序中删除该客户端将从子表中删除该记录并在父表上抛出ConstraintViolationException。

我们的解决方案是使用SQL查询删除子记录,因为HQL会尝试删除父记录。然后我们必须刷新缓存,以便Hibernate知道子记录不再存在。

Java中有没有办法告诉Hibernate只删除子记录?基本上覆盖删除父对象的内置行为?无需编写自定义查询?可能不可能,但我很好奇,如果我错过了什么。

0 个答案:

没有答案