querydsl是否支持从子查询插入?

yptwkmov  于 2021-07-26  发布在  Java
关注(0)|答案(0)|浏览(392)

我有一个简单的模式,用于以两种不同的方式存储链接,我正在从一种方式迁移到另一种方式。在旧样式链接没有匹配的新样式链接的情况下,我已经能够使用querydsl使用 INSERT 从子查询。但是,当一个旧式链接有一个具有不同目的地的新式链接时,我想做一个 UPDATE 从一个子查询,我还不能让它在querydsl中工作,尽管我可以使用纯sql。
下面是我的基本伪模式:

  1. TABLE LINK_A
  2. type int
  3. src int
  4. dest int
  5. TABLE LINK_B
  6. child int
  7. parent int

当一个老式的链接( LINK_A )具有匹配的新式链接( LINK_B )目的地不同。 src == child 以及 dest <> parent ,然后我要更新新样式的链接并设置其 parent 到旧式链接的 dest .
以下是我成功使用的sql查询,用于执行此操作:

  1. UPDATE LINK_B
  2. SET parent = subquery.dest
  3. FROM (SELECT src, dest
  4. FROM LINK_A la
  5. WHERE type = 42
  6. AND EXISTS (
  7. SELECT child FROM LINK_B lb
  8. WHERE lb.child = la.src
  9. AND lb.parent <> la.dest
  10. )
  11. ) AS subquery
  12. WHERE LINK_B.child = subquery.src;

我无法把它转换成querydsl。以下是我目前掌握的情况:

  1. BooleanExpression oldLinkHasNewLinkWithDifferentDest = SQLExpressions
  2. .select(LINK_B.child)
  3. .from(LINK_B)
  4. .where(
  5. LINK_B.child.eq(LINK_A.src),
  6. LINK_B.parent.ne(LINK_A.dest))
  7. .exists();
  8. SubQueryExpression<Tuple> oldLinksWithDifferentNewLinks = SQLExpressions
  9. .select(LINK_A.src, LINK_A.dest)
  10. .from(LINK_A)
  11. .where(
  12. LINK_A.linktype.eq(42),
  13. oldLinkHasNewLinkWithDifferentDest
  14. );
  15. update(LINK_B) ??
  16. .set(LINK_B.parent, ??
  17. ??

有人能帮我把这事做完吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题