如何将布尔参数传递给HQL新构造函数

时间:2012-04-18 17:10:01

标签: java hibernate jpa

情境:我有一个对象 SubjectRow 包装对象主题(对象主体是可持久实体)。我需要直接在HQL中创建新的包装器对象。

public class SubjectRow{
    Subject subject;
    String myString;
    boolean myBoolean;

    public SubjectRow(SubjectSch subject, String myString) {
        this.subject = subject;
        this.myString = myString;
    }

    public SubjectRow(SubjectSch subject, boolean myBoolean) {
        this.subject = subject;
        this.myBoolean = myBoolean;
    }


}

带有字符串的构造函数的HQL(它的工作原理应该如此):

SELECT new package.SubjectRow(s, 'myString') FROM Subject s

问题即可。有时我需要调用此包装器的另一个构造函数来接受布尔值而不是字符串的问题。我尝试了同样的方法

SELECT new package.SubjectRow(s, true) FROM Subject s

但是Hibernate抱怨它在类SubjectRow中找不到合适的构造函数。当然,我可以传递字符串然后进行适当的投射 - 但它太难看了。

问题:我应该如何更改我的HQL和/或构造函数以直接传递此布尔参数(可以使用布尔值)?

“解决方案”即可。因为我无法找到如何正确传递布尔值,所以我必须稍微修改我的域对象。我只是从SubjectRow中删除这个布尔属性,而是创建作为原始对象的子级的SubjectRowFalse和SubjectRowTrue类。而现在只使用两个HQL

SELECT new package.SubjectRowTrue(s)FROM Subject s

SELECT new package.SubjectRowFalse(s)FROM Subject s

当然,这只是一种解决方法而不是原始问题的解决方案

1 个答案:

答案 0 :(得分:0)

我不是百分百肯定,但我认为您可能需要使用布尔对象而不是布尔基元。