当前位置: 首页 > 知识库问答 >
问题:

QueryDSL where子句上的NullPointerException

松灿
2023-03-14

使用Query DSL和hibernate(Spring Data JPA)构建查询,如下所示

    if( bankId != null ){
        query.where(
            coopMember.personId.bankAccountId.isNotNull().and(
            coopMember.personId.bankAccountId.bankBranch.bankId.eq(bankId))
        );
    }

    return query.fetch();

这里的逻辑很简单:如果有一个与某个人关联的银行帐户,则按银行ID过滤结果。

BankAccount实体具有一个BankBranch,它包含BankId整数值。CoopMember实体可能具有也可能没有BankAccount

    if( bankId != null ){
        query.where(
                coopMember.personId.bankAccountId.isNotNull().and(
                        coopMember.personId.bankAccountId.bankBranch.isNotNull())
        );
    }

共有1个答案

杭曦
2023-03-14

我最近遇到了一个类似的问题,不得不通过q-classs构造函数进行调试,以了解链中某个字段为空的原因。解决办法在于正式文件:

默认情况下,Querydsl只初始化前两个级别的引用属性。如果需要更长的初始化路径,则必须通过com.querydsl.core.annotations.QueryInit注释在域类型中进行注释。QueryInit用于需要深度初始化的属性。下面的示例演示用法。

@Entity
class Event {
    @QueryInit("customer.address")
    Account account;
}

@Entity
class Account {
    Customer customer;
}

@Entity
class Customer {
    String name;
    Address address;
    // ...
}

当事件路径初始化为根路径/变量时,此示例强制初始化Account.customer路径。路径初始化格式也支持通配符,例如“Customer”。或者只是“”。

 类似资料:
  • 在oracle数据库上似乎有很多查询语法来获取数据,这里我只想问一下运行良好的查询,但我完全不明白。查询如下: 从上面的查询来看,它的工作很好。但是我不明白为什么会有TO_DATE('01/01/197000:00:00','mm/dd/yyyy hh24:mi:ss和(create_date/(60*60*24)),'mm/dd/yy hh24:mi:ss') 有人能解释一下吗? 提前致谢

  • 问题内容: 我有这个查询: 但是我想做这样的事情: 如何检查电子邮件是否存在?我要使用电子邮件,如果此字段为空,我要使用email2。我该如何完成? 问题答案: 用于选择字段,然后在其后放置该子句:

  • 问题内容: 有什么区别,每个应该有什么区别? 如果我正确理解该理论,则查询优化器应该可以互换使用。 问题答案: 它们不是同一件事。 考虑以下查询: 和 第一个将返回订单及其订单号的行(如果有)。第二个将返回所有订单,但只有订单将具有与之关联的任何行。 使用,子句 实际上是 等效的。但是,仅仅因为它们在功能上相同而产生相同的结果,并不意味着这两种子句具有相同的语义。

  • 我是新的mongodb,我有一个文档在我的db如下: {“_id”:{“$oid”:“546e916cd38e0b3e0e79592f”},名称:“'hamed”,“实体:[“1”,“2”]} 现在我想阅读实体为[“1”,“2”]的aal文档,为此我尝试了以下代码: 但它不返回任何东西...有人能帮助我如何正确地写我的where子句吗?

  • 问题内容: 我今天输入了错误的查询,但它仍然有效,并给出了预期的结果。我的意思是运行此查询: 但是我不小心跑了这个查询 (请注意,而不是最后一个子句中的) 并且都从用户ID返回了正确的员工ID。 这两个查询有什么区别?第二种形式是否仅联接满足条件的2个表的成员,而第一种形式将联接整个表,然后运行查询?一个效率比另一个效率高吗?还有其他我想念的东西吗? 谢谢! 问题答案: 对于这样的内部联接,它们在