2009-09-07 14 views
7

私は、Oracle DBにpdfレポートを保存しました。 レポートのdataTypeはbyteArrayです。Groovyドメインマッピング

次のようにドメインの定義は次のとおりです。

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として定義する必要がありますか?

「はい」の場合は、どうすればよいですか?

ありがとうございます。

答えて

7

255は、byte []に​​提供されるデフォルトサイズです。要件に応じて、レポートの制約の最大サイズを指定します。何かのように:

static constraints = { 
    report(maxSize: 50000000) 
} 

DBのフィールドタイプが設定されます。マイケルBorgwardtの回答に基づいて(MEDIUMBLOB、LONGBLOBなど)

1

は、明示的にドメインクラスに以下の例のためにあなたが追加することができ、「ブロブ」または「バイナリ」のいずれかにタイプを設定してみてください:ここで

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

は、この問題を解決することを約束blog articleです。そのトリックは、タイプjava.sql.Blobのフィールドを持つように思われ、byte[]フィールドはそれに由来し、一時的なものとしてマークされています。

1

は、ここで私は、この問題を解決するためにやったことです:

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 
    } 

}