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

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

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

TABLE LINK_A
    type int
    src int
    dest int

TABLE LINK_B
    child int
    parent int

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

UPDATE LINK_B
    SET parent = subquery.dest
    FROM (SELECT src, dest
            FROM LINK_A la
            WHERE type = 42
            AND EXISTS (
                    SELECT child FROM LINK_B lb
                    WHERE lb.child = la.src
                    AND lb.parent <> la.dest
            )
    ) AS subquery
    WHERE LINK_B.child = subquery.src;

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

BooleanExpression oldLinkHasNewLinkWithDifferentDest = SQLExpressions
            .select(LINK_B.child)
            .from(LINK_B)
            .where(
                    LINK_B.child.eq(LINK_A.src),
                    LINK_B.parent.ne(LINK_A.dest))
            .exists();

    SubQueryExpression<Tuple> oldLinksWithDifferentNewLinks = SQLExpressions
            .select(LINK_A.src, LINK_A.dest)
            .from(LINK_A)
            .where(
                    LINK_A.linktype.eq(42),
                    oldLinkHasNewLinkWithDifferentDest
            );

    update(LINK_B) ??
    .set(LINK_B.parent, ??
    ??

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

暂无答案!

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

相关问题