java - HQL 和内部类(例如构建器)

标签 java hibernate

考虑一个采用构建器模式的Result DTO:

package com.example;
public class Result {
    int someValue;

    public static class Builder {
        private final Foo foo;
        private final Bar bar;

        public Builder(Foo foo, Bar bar) {
            this.foo = foo;
        }

        public Result build() {
            Result r = new Result();
            r.someValue = /* compute value based on supplied Foo and Bar */;
            return r;
        }
    }
}

现在,我想在 HQL 查询中创建构建器,例如:

select new Result.Builder(f, b) from Foo f, Bar b where ...

但是,我最终还是报错了

Unable to locate class [com.example.Result.Builder]

一个解决方案是将 Builder 移到一个单独的类中,但我喜欢将 Builder 与其实体整齐地打包在一起。

有没有办法让 Hibernate 识别 select 子句中的内部类?

最佳答案

事实证明我最终找到了解决方案;正确的语法是带有内部类的$分隔符的完全限定名称,例如:

select new com.example.Result$Builder(f, b) from ...

关于java - HQL 和内部类(例如构建器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35503917/

相关文章:

java - 如何在整个应用程序中使用 "LocalBroadcastManager"?

java - 为什么建议避免外键上的单向一对多关联?

java - JAXB 和继承在编码时起作用;但不解码

java - 许多同时连接和扩展的 Tomcat 性能问题

java - Hibernate 在同一 session 中更新多个对象

java - 无法找到类型为 'org.hibernate.SessionFactory' 的 bean

hibernate - 多对多 hibernate 反向侧被忽略

java - Jasypt 使用 Bouncy CaSTLe 的 EncryptionOperationNotPossibleException

java - 如何使用 Hibernate 尽可能快地插入数据

java - 如何使Spring应用程序的业务逻辑用户可配置?