Groovy域映射

时间:2009-09-07 11:06:35

标签: oracle grails groovy gorm domain-mapping

我有一个将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 个答案:

答案 0 :(得分:7)

255是提供给byte []的默认大小。根据您的要求,在约束中指定报告的最大大小。类似的东西:

static constraints = {
    report(maxSize: 50000000)
}

根据最大尺寸,将设置DB中的字段类型。 (mediumblob,longblob等)

答案 1 :(得分:1)

尝试将类型明确设置为“blob”或“binary”,例如,您可以将以下内容添加到域类中:

static mapping = {
    report type:'blob'
}

答案 2 :(得分:1)

这是一个承诺解决这个问题的blog article。诀窍似乎是拥有java.sql.Blob类型的字段,其中byte[]字段派生自该字段并标记为瞬态。

答案 3 :(得分: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
    }

}