Tengo un problema extraño con respecto a la asignación de hibernación que contiene objetos grandes (BLOB), al cambiar entre diferentes bases de datos.Hibernate, Postgresql: La columna "x" es de tipo oid pero la expresión es de tipo byte
@Lob
private byte[] binaryData;
El campo de arriba crea un campo de matriz de bytes en MySQL y Oracle, sin embargo, en PostreSQL crea un campo de tipo OID.
Ahora, cuando intento acceder a este campo que trabaja muy bien en las otras bases de datos, pero en PostgreSQL se produce un error con el siguiente error
Column "binaryData" is of type oid but expression is of type bytea.
así que traté de simplemente eliminar la anotación "@Lob", el cual resolverá el problema para PostgreSQL, sin embargo en MySQL sin esta anotación, hibernate crea un campo de tipo "tinyblob", que es pequeño en la mayoría de nuestros casos. Y, como queremos utilizar este proyecto en más de un entorno, es molesto tener dos asignaciones diferentes para cambiar.
¿Hay alguna anotación que obligue a postgreSQL a usar bytea en lugar de oid para los campos anotados con @Lob? ¿O es de alguna manera posible omitir el @Lob y poner algo más para obligar a MySQL a asignarlo con un tipo de datos más grande como lo haría con @Lob?
Incluso podía imaginar tener una solución como esta
if (field is of type oid)
store it as oid
else if (field is of type bytea)
store it as bytea
else
// not storable
y lo mismo que un comprador, si existe una manera de hacer la clase de este
EDIT:
La siguiente declaración está funcionando. Se asigna la columna como OID, sin embargo hibernación usar este sabe cómo almacenar y recuperar datos de un campo tan
@Lob
@Type(type="org.hibernate.type.PrimitiveByteArrayBlobType")
private byte[] binaryFile;
Hola Don! Gracias por su respuesta. Lo probé, y funciona bien, sin embargo encontré entretanto una solución simple que agregué a la pregunta – Hons