Groovy的域映射
-
21-09-2019 - |
题
我有一个到保存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
}
}
不隶属于 StackOverflow