Estoy tratando de hacer que una entidad funcione con Oracle (11.2) y PostgreSQL (9.4) en una aplicación Spring Boot (1.4.4).
Mi entidad contiene un campo de texto largo (más de 4000 caracteres). El tipo de datos apropiado en Oracle es CLOB y el tipo correspondiente en PostgreSQL es TEXT.
Puedo hacer que funcione con PostgreSQL
@Column(name = "LONG_TEXT", columnDefinition="TEXT") private String longText;Sin embargo, fallaría con Oracle en la etapa de validación de hibernación ya que CLOB requiere la anotación @Lob.
El siguiente código funciona con Oracle
@Lob @Column(name = "LONG_TEXT") private String longText;Sin embargo, esta vez falla al leer de PostgreSQL con la siguiente excepción:
PSQLException: los objetos grandes no se pueden usar en el modo de confirmación automática
El desbordamiento de pila sugiere realizar consultas en transacciones. Sin tener en cuenta el requisito cuestionable de invocar transacciones en consultas seleccionadas, agregar @Transactional a los métodos de consulta no ayudó.
Cualquier pensamiento es más que bienvenido.
La solución a la que llegamos es adoptar el enfoque @Lob y @Transactional.
El problema principal fue con la ubicación de la anotación @Transactional, lo que provocó la excepción PSQLException. Una vez arreglado, pudimos trabajar con ambos tipos de bases de datos.