Hibernate Coldfusion表单:在级联中删除

Hibernate Coldfusion表单:在级联中删除,hibernate,orm,coldfusion,Hibernate,Orm,Coldfusion,我不是coldfusion Form方面的专家,我打电话给你帮忙,因为我在开玩笑 我不想删除一个实体“动作”,它有两个关系:一对多、“文本”和“奖金” 当我尝试删除一个只有文本但没有奖励的操作时,一切都很好。Hibernate删除操作记录和子文本。这就是我想要的 但当动作同时包含文本和奖金时,我得到了以下错误: Column 'bonus_actionId' cannot be null Root cause :java.sql.BatchUpdateException: Column 'bon

我不是coldfusion Form方面的专家,我打电话给你帮忙,因为我在开玩笑

我不想删除一个实体“动作”,它有两个关系:一对多、“文本”和“奖金”

当我尝试删除一个只有文本但没有奖励的操作时,一切都很好。Hibernate删除操作记录和子文本。这就是我想要的

但当动作同时包含文本和奖金时,我得到了以下错误:

Column 'bonus_actionId' cannot be null
Root cause :java.sql.BatchUpdateException: Column 'bonus_actionId' cannot be null
为什么Hibernate在删除操作之前不删除奖金?就像文本一样

谢谢

行动实体:

component {
    property name="id"      column="action_id" type="numeric" fieldtype="id" generator="native";

    /* ... */

    property name="texts" type="array" 
             fieldtype="one-to-many" cfc="Text" fkcolumn="text_actionId" singularname="text"
             cascade="all-delete-orphan" lazy="true";

    /* ... */

    property name="bonus" type="array" 
             fieldtype="one-to-many" cfc="Bonus" fkcolumn="bonus_actionId" singularname="bonus" 
             cascade="all-delete-orphan" lazy="true";
}
文本实体:

component {
    property name="id"      column="text_id" type="numeric" fieldtype="id" generator="native";

    /* ... (properties without relationships */

    property name="action" fieldtype="many-to-one" fkcolumn="text_actionId" cfc="Action" notnull="false" lazy="true";
}
奖金实体:

component  {
    property name="id"      column="bonus_id" type="numeric" fieldtype="id" generator="native";

    /* ... (properties WITH relationships */

    // Parent
    property name="action" fieldtype="many-to-one" fkcolumn="bonus_actionId" cfc="Action" notnull="true" lazy="true";

}

不知何故,Hibrate会首先将实体设置为Null(成为孤立项),然后删除孤立项


所以。。从Bonus.cfc中的属性
action
中删除
notnull=“true”
,您就一切就绪。

不知何故,Hibrate会首先将实体设置为Null(成为孤立项),然后删除孤立项


所以。。从Bonus.cfc中的属性
action
中删除
notnull=“true”
,您就一切就绪了。

您可以通过将
inverse=“true”
添加到关系的外键拥有方来保持您的
notnull=“true”
并使级联正常工作

在您的情况下,这将出现在
操作
实体上:

component {

    property name="id"
             column="action_id"
             type="numeric"
             fieldtype="id"
             generator="native";

    /* ... */

    property name="texts"
             type="array" 
             fieldtype="one-to-many"
             cfc="Text"
             fkcolumn="text_actionId"
             singularname="text"
             cascade="all-delete-orphan"
             inverse="true"
             lazy="true";

    /* ... */

    property name="bonus"
             type="array" 
             fieldtype="one-to-many"
             cfc="Bonus"
             fkcolumn="bonus_actionId"
             singularname="bonus" 
             cascade="all-delete-orphan"
             inverse="true"
             lazy="true";
}

您可以将
notnull=“true”
添加到关系的外键-拥有方,从而保持您的
notnull=“true”
并使级联正常工作

在您的情况下,这将出现在
操作
实体上:

component {

    property name="id"
             column="action_id"
             type="numeric"
             fieldtype="id"
             generator="native";

    /* ... */

    property name="texts"
             type="array" 
             fieldtype="one-to-many"
             cfc="Text"
             fkcolumn="text_actionId"
             singularname="text"
             cascade="all-delete-orphan"
             inverse="true"
             lazy="true";

    /* ... */

    property name="bonus"
             type="array" 
             fieldtype="one-to-many"
             cfc="Bonus"
             fkcolumn="bonus_actionId"
             singularname="bonus" 
             cascade="all-delete-orphan"
             inverse="true"
             lazy="true";
}

是否可以保持notnull=“true”并且仍然享受自动抑制功能?没有一个动作奖金就不可能存在,我发现前面的行为很有用。我知道我可以使用ORM事件来处理操作preDelete并手动删除所有子项,但我认为这是“自然的”,而不是在Hibernate中实现的。是吗?可以保持notnull=“true”并且仍然享受自动抑制吗?没有一个动作奖金就不可能存在,我发现前面的行为很有用。我知道我可以使用ORM事件来处理操作preDelete并手动删除所有子项,但我认为这是“自然的”,而不是在Hibernate中实现的。它是?