我有一个到保存PDF报告到Oracle DB。 该报告的数据类型为ByteArray。

在域定义如下:

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

byte[] report
Company company
Date month

}

不幸的是这限定在Oracle DB的场 其具有RAW DATA_TYPE和255的lenghth。

我应该如何定义这个领域到域类? 应该被定义为一个BLOB?

如果是,如何做到这一点?

预先感谢。

有帮助吗?

解决方案

255是提供给一个字节的默认大小[]。指定的约束按您的要求报告的最大尺寸。是这样的:

static constraints = {
    report(maxSize: 50000000)
}

根据最大尺寸,在DB中的字段类型将被设置。 (MEDIUMBLOB,LONGBLOB等)

其他提示

尝试显式设置类型到“blob”或“二进制”,例如可以添加以下域类:

static mapping = {
    report type:'blob'
}

下面是一个博客文章,有望解决这个问题。特技似乎是具有类型java.sql.Blob的场,与来自衍生并标记为瞬态byte[]字段。

根据迈克尔博格瓦特答案,这里是我做过什么来解决这个问题:

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
    }

}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top