3

情况:我有一个包装对象Subject的对象SubjectRow(对象 Subject 是可持久实体)。我需要直接在 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

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

4

1 回答 1

0

我不是 100% 确定,但我认为您可能需要使用布尔对象而不是布尔原语。

于 2012-04-19T15:20:27.387 回答