簡體   English   中英

如何將布爾參數傳遞給HQL新構造函數

[英]How to pass boolean parameter to HQL new constructor

情況 :我有一個對象SubjectRow包裝對象Subject (對象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

當然,這只是一種解決方法,而不是原始問題的解決方案

我不是百分百肯定,但我認為您可能需要使用布爾對象而不是布爾基元。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM