gpt4 book ai didi

java - Querydsl - 不相关表上的左连接

转载 作者:行者123 更新时间:2023-11-30 08:10:08 25 4
gpt4 key购买 nike

我遇到了与 this 中描述的问题非常相似的问题问题。

A 和 B 实体之间没有关系,我想避免添加一个。获得与下面的查询相同的结果但使用 querydsl 的最佳方法是什么?我将对结果进行排序和分页,因此子查询不是最好的方法。

@Entity
class A {
String email;
}

@Entity
class B {
String email;
}

SELECT * FROM A a left join B b on a.emial=b.email;

最佳答案

正如 Timo 所说,如果需要,可以使用 Querydsl SQL 并执行动态路径之类的操作:

PathBuilder<Object> aObj = new PathBuilder<Object>(Object.class, "A");
Path<Object> aAlias = new PathBuilder<Object>(Object.class, "a");

PathBuilder<Object> bObj = new PathBuilder<Object>(Object.class, "B");
Path<Object> bAlias = new PathBuilder<Object>(Object.class, "b");

SQLTemplates templates = MySQLTemplates.builder().printSchema().build();
Configuration configuration = new Configuration(templates);
SQLQueryFactory sQLQueryFactory new SQLQueryFactory(configuration, null);

SQLQuery<?> sqlQuery = sQLQueryFactory.from(aObj.as("a"));
sqlQuery = sqlQuery.innerJoin(bObj, bAlias);

SimpleExpression<T> leftClause = Expressions.stringPath(aAlias, "email");
SimpleExpression<T> rightClause = Expressions.stringPath(bAlias, "email");

sqlQuery = sqlQuery.on(leftClause.eq(rightClause));
sqlQuery = sqlQuery.select(SQLExpressions.all);

// This will give you the required SQL
// select * from A a left join B b on a.emial = b.email;
System.out.println(sqlQuery.getSQL().getSQL());

关于java - Querydsl - 不相关表上的左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30499486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com