2009-09-07 12 views
7

Bir pdf raporunu Oracle DB'ye kaydetmem gerekiyor. Raporun dataType bir byteArray. aşağıdaki gibiGroovy etki alanı eşlemesi

alan tanımı:

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

byte[] report 
Company company 
Date month 

}

Ne yazık ki bu Oracle DB tanımlayan bir RAW veri_türü ve 255

ne gereken bir uzunluk ile olan bir alan Bu alanı alan sınıfına mı dahil ettim? BLOB olarak tanımlanmalı mı?

Evet ise, Nasıl yapılır?

Şimdiden teşekkürler.

cevap

7

255 bir bayt [] için varsayılan boyuttur. Gereksinimlerinize göre kısıtlamalarda rapor için maksimum boyutu belirtin. Şunlar gibi:

static constraints = { 
    report(maxSize: 50000000) 
} 

Maksimum boyuta bağlı olarak, DB'deki alan türü ayarlanacaktır.

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 
    } 

} 
: (MEDIUMBLOB, longblob vs.) Michael Borgwardt cevap dayanarak
1

açıkça alanı sınıfa aşağıdaki örneğin ekleyebilir, bir 'blob' veya 'ikili' ya kadar türünü ayarlama deneyin: İşte

static mapping = { 
    report type:'blob' 
} 
1

bu sorunu çözmek için söz blog article bu. Hile, java.sql.Blob türünde bir alana sahip, byte[] alanından türetilmiş ve geçici olarak işaretlenmiş gibi görünmektedir.

1

, burada ben bu sorunu çözmek için ne yaptığını