سؤال

لديّ لحفظ تقرير PDF في Oracle DB. نوع بيانات التقرير هو bytearray.

تعريف المجال كما يلي:

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

byte[] report
Company company
Date month

}

لسوء الحظ ، يعرّف هذا في حقل Oracle DB يحتوي على data_type RAW و 255.

كيف يمكنني تحديد هذا الحقل في فئة المجال؟ يجب تعريفها على أنها نقطة؟

إذا كانت الإجابة بنعم ، كيف تفعل هذا؟

شكرا لك مقدما.

هل كانت مفيدة؟

المحلول

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
    }

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top