java - 通过左连接表/Querydsl 上的 QBean 映射具有 null 属性的对象

标签 java querydsl

我正在使用 Querydsl 4.1.0 从数据库生成 Qtable,并且自己创建 Qbean 以将结果转换为我的 Java 对象。我面临的问题是,我的 A 类有一个 B 类属性,如果我使用“A left join B”,那么如果数据库中不存在 A 的 id 的 B(这将导致这些列的值为空值) B 表在那一行),我的 A 对象在转换后将有一个 B 对象,并且所有属性均为 null。有没有办法避免实例化这个不需要的 B 对象?

我可以看到这里的问题是 QBean 的 newInstance() 方法总是创建一个 B 实例并返回它,无论所有字段的值是否为 null,在我看来这不太正确.

<小时/>

我的类(class):

protected final  QBean<Contact> contactQBean = 
                    Projection.fields(Contact.class,
                    qContact.id, qContact.firstName, qContact.lastName, 
                    qContact.middleName, addressQBean.as("primaryAddress"));

------------------------------------

 public class Contact {
private Integer id;
private String firstName;
private String middleName;
private String lastName;
private Address primaryAddress;

我的查询:

Map<Integer, Contact> resultMap = queryFactory.from(qContact)

            .leftJoin(qContact.contactAddressFK, qAddress)

            .transform(groupBy(qContact.id).as(contactQBean));

最佳答案

你的问题太困难太复杂了。我不知道答案。但也许您可以尝试转到 IDE 并从堆栈中复制一些其他代码。 希望对您有帮助

关于java - 通过左连接表/Querydsl 上的 QBean 映射具有 null 属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56862643/

相关文章:

java - 如何使用java监控托管服务器的堆大小

java - SpeechRecognizer 什么都不做......我错过了什么

java - spring query dsl : how to sort by two database fields, 是外键之一?

java - 在 Spring Data 中为同一 QueryDSL 路径创建多个别名

java - Querydsl JPQLQuery fetchAll 目的

unit-testing - 如何测试 QueryDsl 谓词

java - Java中2个大整数相除

java - 按下 ENTER 后鼠标光标发生变化

java - 一种释放数组空间的方法

querydsl - Elasticsearch 多个字段的数组