رسم خرائط مجال مروع
-
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 يحتوي على 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
}
}