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