У меня странная проблема, связанная с отображением спящего режима, содержащим большие объекты (BLOB), при переключении между различными базами данных.
@Lob
private byte[] binaryData;
Поле выше создает поле байтового массива в MySQL и в Oracle, однако в PostreSQL оно создает поле типа oid.
Теперь, когда я пытаюсь получить доступ к этому полю, он отлично работает в других базах данных, но в PostgreSQL происходит сбой со следующей ошибкой
Column "binaryData" is of type oid but expression is of type bytea.
Поэтому я попытался просто удалить аннотацию "@Lob", что решит проблему для PostgreSQL, однако в MySQL без этой аннотации hibernate создает поле типа "tinyblob", которое в большинстве случаев мало , И, поскольку мы хотим использовать этот проект в более чем одной среде, раздражает необходимость переключения двух разных отображений.
Существует ли какая-либо аннотация, которая вынуждает postgreSQL использовать bytea вместо oid для полей, аннотированных @Lob? Или можно как-то опустить @Lob и поместить что-то еще, чтобы заставить MySQL выделить его с большим типом данных, как это было бы при использовании @Lob?
Я мог бы даже представить себе такое решение
if (field is of type oid)
store it as oid
else if (field is of type bytea)
store it as bytea
else
// not storable
и то же самое, что и получатель, если существует способ сделать это
EDIT:
Следующая декларация работает. Он выделяет столбец как oid, однако в спящем режиме, используя это, знает, как хранить и извлекать данные из такого поля
@Lob
@Type(type="org.hibernate.type.PrimitiveByteArrayBlobType")
private byte[] binaryFile;