你好,我有 4 张桌子
第一个表是菜单 有列:
- 身份证号PK
- parent_id 编号 FK 到 menu.Id
- 标题字符变化(250)
- softdel 布尔默认值 false
第二个表是页面:
- 标识为 PK
- menu_id 作为 menu.id 的 FK
- page_id 作为 page.id 的 FK
- softdel 布尔默认值 false
第三张表是文章:
- id 作为 PK 和 FK 到 page.id
- softdel boolean 默认设置为 false
和第四张表article_lang:
- partial_id 作为 PK
- id 作为 article.id 的 FK
- 语言字符
- softdel boolean 默认设置为 false
当我'删除'(我的意思是设置softdel true)菜单时,我需要创建更新语句,例如200我还将softdel = false设置为所有parent_id = 200的菜单以及所有menu_id = menus_id的页面和page_id的文章= pages.id 等等....
我只需要 1 个更新语句就可以做到吗??
如果我可以创建 JPA 查询或 EJB 查询,那就太好了 :)
在 oracle 我写声明:
update pub_menu pm set softdel = 0 where pm.id in (
with menu_tree(id, parent_id) as (
select
t1.id , t1.parent_id
from menu t1
where t1.id = 454
union all
select
t2.id , t2.parent_id
from menu_tree
join menu t2 on menu_tree.id = t2.parent_id
)
select id from menu_tree
)
update menu_page pmp set softdel = 1 where pmp.menu_id in (
with menu_tree(id, parent_id) as (
select
t1.id , t1.parent_id
from menu t1
where t1.id = 454
union all
select
t2.id , t2.parent_id
from menu_tree
join menu t2 on menu_tree.id = t2.parent_id
)
select id from menu_tree
)
它的工作,但我这样做是不正确的:/