Groovy сопоставление доменов

У меня есть сохранить отчет в формате PDF в базу данных Oracle. Тип данных отчета — это byteArray.

Определение домена выглядит следующим образом:

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

byte[] report
Company company
Date month

}

К сожалению, это определяет в БД Oracle поле с типом данных RAW и длиной 255.

Как мне определить это поле в классе предметной области? Должен быть определен как BLOB?

Если да, то как это сделать?

Заранее спасибо.


person Luixv    schedule 07.09.2009    source источник


Ответы (4)


255 — это размер по умолчанию для byte[]. Укажите максимальный размер отчета в ограничениях в соответствии с вашими требованиями. Что-то типа:

static constraints = {
    report(maxSize: 50000000)
}

В зависимости от максимального размера будет установлен тип поля в БД. (средний блоб, длинный блоб и т. д.)

person Aman Aggarwal    schedule 07.09.2009

Попробуйте явно установить тип «большой двоичный объект» или «двоичный», например, вы можете добавить следующее в класс домена:

static mapping = {
    report type:'blob'
}
person John Wagenleitner    schedule 07.09.2009

Вот статья в блоге который обещает решить эту проблему. Уловка, кажется, состоит в том, чтобы иметь поле типа java.sql.Blob с полем byte[], полученным из него и помеченным как переходное.

person Michael Borgwardt    schedule 07.09.2009

Основываясь на ответе Майкла Боргвардта, вот что я сделал для решения этой проблемы:

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
    }

}
person rodvlopes    schedule 20.04.2012