7

PDFレポートをOracle DBに保存する必要があります。レポートの dataType は byteArray です。

ドメインの定義は次のとおりです。

static constraints = {
 report(nullable:false)
 company(nullable:false)    
 month(nullable:false)    
}

byte[] report
Company company
Date month

}

残念ながら、これは Oracle DB で RAW data_type と 255 の長さを持つフィールドを定義します。

このフィールドをドメイン クラスに定義するにはどうすればよいですか? BLOB として定義する必要がありますか?

はいの場合、これを行う方法は?

前もって感謝します。

4

4 に答える 4

7

255 は、byte[] に提供されるデフォルトのサイズです。要件に従って、制約でレポートの最大サイズを指定します。何かのようなもの:

static constraints = {
    report(maxSize: 50000000)
}

最大サイズに基づいて、DB のフィールド タイプが設定されます。(ミディアムブロブ、ロングブロブなど)

于 2009-09-07T17:02:50.093 に答える
1

Michael Borgwardt の回答に基づいて、この問題を解決するために私がしたことは次のとおりです。

import java.sql.Blob

import org.hibernate.lob.BlobImpl

class Pagina {

    Blob reportBlob

    static mapping = {
        reportBlob column: 'PAGI_TX_DADOS', type: 'blob'
    }

    def setReport(byte[] bytes) {
        if (bytes != null) {
            ByteArrayInputStream bais =  new ByteArrayInputStream(bytes)
            int length =  bytes.length
            reportBlob = new BlobImpl(bais,length)      
        }
    }

    def getReport() {
        return reportBlob?.binaryStream
    }

}
于 2012-04-20T18:56:21.167 に答える
1

タイプを「blob」または「binary」に明示的に設定してみてください。たとえば、次をドメイン クラスに追加できます。

static mapping = {
    report type:'blob'
}
于 2009-09-07T15:54:25.800 に答える
1

これは、この問題を解決することを約束するブログ記事です。トリックは、 type のフィールドを持ち、そこから派生java.sql.Blobしたフィールドを一時的なものとしてマークすることのようです。byte[]

于 2009-09-07T15:55:54.617 に答える