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

时间:2016-02-19 11:13:13

标签: 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 ...

然而,我最终错误

  

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

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

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

1 个答案:

答案 0 :(得分:6)

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

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