我们说有两张桌子。一个是父母,另一个是孩子。
我为每个表都有sql mappers。
如何在父母的映射器中使用子级的sql映射器?
我的意思是我想实施ON DELETE CASCADE
。遗憾的是,我的数据库并不支持该功能。
在我的孩子映射器中,我有......
<delete id="deleteChildren" ...>
DELETE FROM CHILD WHERE PARENT_ID = #{parentId}
</delete>
在我的父映射器中,我只想
<delete id="deleteParent" ...>
<!-- call `deleteChildren` here -->
<!-- ant then delete the parent -->
DELETE FROM PARENT WHERE ID = #{id}
</delete>
答案 0 :(得分:1)
您可以只在一个片段中运行两个查询,并使用include
重用其他片段。但SQL语法取决于您的数据库。
在MySQL中:
<delete id="deleteParent" ...>
<include refid="Child.deleteChildren" />;
DELETE FROM PARENT WHERE ID = #{id};
</delete>
在MS-SQL中:
<delete id="deleteParent" ...>
<include refid="Child.deleteChildren" />
GO
DELETE FROM PARENT WHERE ID = #{id}
</delete>