我有一个将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?
如果是,请该怎么做?
提前致谢。
答案 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
}
}