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

pro*_*ook 4 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

select new Result.Builder(f, b) from Foo f, Bar b where ...
Run Code Online (Sandbox Code Playgroud)

但是,我最终得到了错误

无法找到类[com.example.Result.Builder]

一种解决方案是将Builder移动到一个单独的类,但我喜欢使用它的实体整齐地包装的Builder.

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

pro*_*ook 6

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

select new com.example.Result$Builder(f, b) from ...
Run Code Online (Sandbox Code Playgroud)

  • Intelij 可能无法解析该符号,但应用程序将启动。 (2认同)