Getting error while using Lob field to store html or json

We were using Lob field (as below) to store html / json. The schema created a field of type oid. - we are using postgres.

@Lob
private String definition;

However after upgrading to org.hibernate.orm:hibernate-core:6.6.0.Final or higher - we are getting the below error for the above field.

Caused by: org.hibernate.exception.DataException Hexadecimal string contains non-hex character: "<p><s>This</s> <strong>is</strong> <em>TEST</em> <u>2</u></p><p><br></p><p>This is sample <span contenteditable=""false""></span></span></p>"; 

Why has the behavior changed ? Ran into this issue when upgrading from spring boot data jpa 3.3.10 to 3.4.0 or higher. It was seen during analysis that hibernate-core:6.6.0.Final or higher has this issue.

Any ideas. This is an existing application - we dont want to change schema unless no other option

What database are you using? Please also specify the version and the driver, and if you could share the full entity mapping and the underlying table’s DDL that would be great.

Hibernate tries its best to handle CLOBs via JDBC across multiple databases, but some of them can be problematic. Try upgrading to the latest Hibernate 6.6 release, and let us know if the issue persists.

Sharing the sample project for replicating this issue
h2 version is kept old as it supports postgres type like oid.

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>lob-demo-spring</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>lob-demo-spring</name>
  <url>http://maven.apache.org</url>

  <properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>17</java.version>
    <spring.boot.version>3.3.10</spring.boot.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
      <version>${spring.boot.version}</version>
    </dependency>

    <!-- H2 Database -->
    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <version>1.4.200</version>
      <scope>runtime</scope>
    </dependency>
    <!-- Optional: Logging -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.28</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.28</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
      <version>${spring.boot.version}</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>${spring.boot.version}</version>
      </plugin>
    </plugins>
  </build>

</project>


App.java

package org.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

`@SpringBootApplication`
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

DataInitializer.java

package org.example;

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

`@Component`
public class DataInitializer implements CommandLineRunner {

    private final DocumentRepository repository;


    public DataInitializer(DocumentRepository repository) {
        this.repository = repository;
    }

    `@Override`
    public void run(String... args) {
        String s1 = "{\"\"t0TTdy\"\":{},\"\"8bGpqZ6t\"\":{\"\"PTSgcphW\"\":\"\"BT7\"\",\"\"tedzQcpeD1\"\": {\"\"stD2cP-sr7BnxOC\"\": {\"\"H4fIQ5wF-FTHG9W\"\": [\"\"6nLBUMHB\"\"]}}}}";
        String largeText =  "This is a <> {}  == {\"json\":\"1\"} very  long document. ".repeat(1);
        largeText = largeText + s1;
        Document doc = new Document("Example Document", largeText);
        repository.save(doc);
        System.out.println("Saved document with ID: " + doc.getId());
        Document newdoc =  repository.findById(doc.getId()).get();
        if(newdoc != null) {
            System.out.println("Retrieved document with ID: " + doc.getId() );
            System.out.println("Retrieved content: " + doc.getContent()
            );
        }

    }
}

Document.java

package org.example;

import jakarta.persistence.*;

`@Entity`
public class Document {

    `@Id`
    `@GeneratedValue(strategy = GenerationType.IDENTITY)`
    private Long id;

    private String title;

    `@Lob`
    `@Column(name = "content_enc", columnDefinition = "CLOB")`
    private String content;

    public Document() {}

    public Document(String title, String content) {
        this.title = title;
        this.content = content;
    }

    // Getters and setters
    public Long getId() { return id; }
    public String getTitle() { return title; }
    public String getContent() { return content; }

    public void setId(Long id) { this.id = id; }
    public void setTitle(String title) { this.title = title; }
    public void setContent(String content) { this.content = content; }
}

DocumentRepository.java

package org.example;

import org.springframework.data.jpa.repository.JpaRepository;

public interface DocumentRepository extends JpaRepository<Document, Long> {}

application.yml

spring:
  datasource:
    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
    driver-class-name: org.h2.Driver
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: none
    show-sql: true
    properties:
      hibernate.format_sql: true


schema.sql

create table document (
                          id bigint generated by default as identity,
                          content_enc oid,
                          title varchar(255),
                          primary key (id)
);


The above springboot code works fine.
---- console partial content- –

2025-05-16T19:28:20.584+05:30 TRACE 94419 --- [           main] org.hibernate.orm.jdbc.bind              : binding parameter (1:CLOB) <- [This is a <> {}  == {"json":"1"} very  long document. {""t0TTdy"":{},""8bGpqZ6t"":{""PTSgcphW"":""BT7"",""tedzQcpeD1"": {""stD2cP-sr7BnxOC"": {""H4fIQ5wF-FTHG9W"": [""6nLBUMHB""]}}}}]
2025-05-16T19:28:20.587+05:30 TRACE 94419 --- [           main] org.hibernate.orm.jdbc.bind              : binding parameter (2:VARCHAR) <- [Example Document]
Saved document with ID: 1

However if we upgrade springboot from 3.3.10 to 3.4.5 - which leads to hibernate upgraded from 6.5.3.Final to 6.6.13.Final - we get the below error

-- Started App in 4.145 seconds (process running for 10.542)
Hibernate: 
    insert 
    into
        document
        (content_enc, title, id) 
    values
        (?, ?, default)
2025-05-16T19:38:14.583+05:30 TRACE 94743 --- [           main] org.hibernate.orm.jdbc.bind              : binding parameter (1:CLOB) <- [This is a <> {}  == {"json":"1"} very  long document. {""t0TTdy"":{},""8bGpqZ6t"":{""PTSgcphW"":""BT7"",""tedzQcpeD1"": {""stD2cP-sr7BnxOC"": {""H4fIQ5wF-FTHG9W"": [""6nLBUMHB""]}}}}]
2025-05-16T19:38:14.583+05:30 TRACE 94743 --- [           main] org.hibernate.orm.jdbc.bind              : binding parameter (2:VARCHAR) <- [Example Document]
2025-05-16T19:38:14.586+05:30  WARN 94743 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 90004, SQLState: 90004
2025-05-16T19:38:14.586+05:30 ERROR 94743 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : Hexadecimal string contains non-hex character: "This is a <> {}  == {""json"":""1""} very  long document. {""""t0TTdy"""":{},""""8bGpqZ6t"""":{""""PTSgcphW"""":""""BT7"""",""""tedzQcpeD1"""": {""""stD2cP-sr7BnxOC"""": {""""H4fIQ5wF-FTHG9W"""": [""""6nLBUMHB""""]}}}}"; SQL statement:
insert into document (content_enc,title,id) values (?,?,default) [90004-200]
2025-05-16T19:38:14.596+05:30  INFO 94743 --- [           main] .s.b.a.l.ConditionEvaluationReportLogger : 

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2025-05-16T19:38:14.607+05:30 ERROR 94743 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.dao.DataIntegrityViolationException: could not execute statement [Hexadecimal string contains non-hex character: "This is a <> {}  == {""json"":""1""} very  long document. {""""t0TTdy"""":{},""""8bGpqZ6t"""":{""""PTSgcphW"""":""""BT7"""",""""tedzQcpeD1"""": {""""stD2cP-sr7BnxOC"""": {""""H4fIQ5wF-FTHG9W"""": [""""6nLBUMHB""""]}}}}"; SQL statement:
insert into document (content_enc,title,id) values (?,?,default) [90004-200]] [insert into document (content_enc,title,id) values (?,?,default)]; SQL [insert into document (content_enc,title,id) values (?,?,default)]
	at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:297) ~[spring-orm-6.2.6.jar:6.2.6]
	at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:256) ~[spring-orm-6.2.6.jar:6.2.6]
	at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:241) ~[spring-orm-6.2.6.jar:6.2.6]
	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:560) ~[spring-orm-6.2.6.jar:6.2.6]
	at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) ~[spring-tx-6.2.6.jar:6.2.6]
	at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:343) ~[spring-tx-6.2.6.jar:6.2.6]
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:160) ~[spring-tx-6.2.6.jar:6.2.6]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.2.6.jar:6.2.6]
	at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:165) ~[spring-data-jpa-3.4.5.jar:3.4.5]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.2.6.jar:6.2.6]
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) ~[spring-aop-6.2.6.jar:6.2.6]
	at jdk.proxy2/jdk.proxy2.$Proxy97.save(Unknown Source) ~[na:na]
	at org.example.DataInitializer.run(DataInitializer.java:22) ~[classes/:na]
	at org.springframework.boot.SpringApplication.lambda$callRunner$5(SpringApplication.java:789) ~[spring-boot-3.4.5.jar:3.4.5]
	at org.springframework.util.function.ThrowingConsumer$1.acceptWithException(ThrowingConsumer.java:82) ~[spring-core-6.2.6.jar:6.2.6]
	at org.springframework.util.function.ThrowingConsumer.accept(ThrowingConsumer.java:60) ~[spring-core-6.2.6.jar:6.2.6]
	at org.springframework.util.function.ThrowingConsumer$1.accept(ThrowingConsumer.java:86) ~[spring-core-6.2.6.jar:6.2.6]
	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:797) ~[spring-boot-3.4.5.jar:3.4.5]
	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:788) ~[spring-boot-3.4.5.jar:3.4.5]
	at org.springframework.boot.SpringApplication.lambda$callRunners$3(SpringApplication.java:773) ~[spring-boot-3.4.5.jar:3.4.5]
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) ~[na:na]
	at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357) ~[na:na]
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510) ~[na:na]
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na]
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) ~[na:na]
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) ~[na:na]
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[na:na]
	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:773) ~[spring-boot-3.4.5.jar:3.4.5]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:325) ~[spring-boot-3.4.5.jar:3.4.5]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1362) ~[spring-boot-3.4.5.jar:3.4.5]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1351) ~[spring-boot-3.4.5.jar:3.4.5]
	at org.example.App.main(App.java:9) ~[classes/:na]
Caused by: org.hibernate.exception.DataException: could not execute statement [Hexadecimal string contains non-hex character: "This is a <> {}  == {""json"":""1""} very  long document. {""""t0TTdy"""":{},""""8bGpqZ6t"""":{""""PTSgcphW"""":""""BT7"""",""""tedzQcpeD1"""": {""""stD2cP-sr7BnxOC"""": {""""H4fIQ5wF-FTHG9W"""": [""""6nLBUMHB""""]}}}}"; SQL statement:
insert into document (content_enc,title,id) values (?,?,default) [90004-200]] [insert into document (content_enc,title,id) values (?,?,default)]
	at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:55) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:58) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:197) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.id.insert.GetGeneratedKeysDelegate.performMutation(GetGeneratedKeysDelegate.java:116) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.engine.jdbc.mutation.internal.MutationExecutorSingleNonBatched.performNonBatchedOperations(MutationExecutorSingleNonBatched.java:47) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.engine.jdbc.mutation.internal.AbstractMutationExecutor.execute(AbstractMutationExecutor.java:55) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.doStaticInserts(InsertCoordinatorStandard.java:194) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.coordinateInsert(InsertCoordinatorStandard.java:132) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.insert(InsertCoordinatorStandard.java:95) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:85) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:682) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:293) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:274) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:324) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:393) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:307) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:223) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:136) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:177) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.event.internal.DefaultPersistEventListener.persist(DefaultPersistEventListener.java:95) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:761) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:745) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
	at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:320) ~[spring-orm-6.2.6.jar:6.2.6]
	at jdk.proxy2/jdk.proxy2.$Proxy93.persist(Unknown Source) ~[na:na]
	at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:636) ~[spring-data-jpa-3.4.5.jar:3.4.5]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) ~[spring-aop-6.2.6.jar:6.2.6]
	at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:277) ~[spring-data-commons-3.4.5.jar:3.4.5]
	at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:170) ~[spring-data-commons-3.4.5.jar:3.4.5]
	at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) ~[spring-data-commons-3.4.5.jar:3.4.5]
	at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:515) ~[spring-data-commons-3.4.5.jar:3.4.5]
	at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:284) ~[spring-data-commons-3.4.5.jar:3.4.5]
	at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:731) ~[spring-data-commons-3.4.5.jar:3.4.5]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.2.6.jar:6.2.6]
	at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:174) ~[spring-data-commons-3.4.5.jar:3.4.5]
	at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:149) ~[spring-data-commons-3.4.5.jar:3.4.5]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.2.6.jar:6.2.6]
	at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:69) ~[spring-data-commons-3.4.5.jar:3.4.5]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.2.6.jar:6.2.6]
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:380) ~[spring-tx-6.2.6.jar:6.2.6]
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-6.2.6.jar:6.2.6]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.2.6.jar:6.2.6]
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138) ~[spring-tx-6.2.6.jar:6.2.6]
	... 26 common frames omitted
Caused by: org.h2.jdbc.JdbcSQLDataException: Hexadecimal string contains non-hex character: "This is a <> {}  == {""json"":""1""} very  long document. {""""t0TTdy"""":{},""""8bGpqZ6t"""":{""""PTSgcphW"""":""""BT7"""",""""tedzQcpeD1"""": {""""stD2cP-sr7BnxOC"""": {""""H4fIQ5wF-FTHG9W"""": [""""6nLBUMHB""""]}}}}"; SQL statement:
insert into document (content_enc,title,id) values (?,?,default) [90004-200]
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:590) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.util.StringUtils.convertHexToBytes(StringUtils.java:1053) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.value.Value.convertToBlob(Value.java:1300) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.value.Value.convertTo(Value.java:838) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.value.Value.convertTo(Value.java:772) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.value.TypeInfo.cast(TypeInfo.java:515) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.table.Column.validateConvertUpdateSequence(Column.java:378) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.table.Table.validateConvertUpdateSequence(Table.java:845) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.command.dml.Insert.insertRows(Insert.java:187) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.command.dml.Insert.update(Insert.java:151) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.command.CommandContainer.executeUpdateWithGeneratedKeys(CommandContainer.java:272) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.command.CommandContainer.update(CommandContainer.java:191) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.command.Command.executeUpdate(Command.java:251) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:191) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:152) ~[h2-1.4.200.jar:1.4.200]
	at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) ~[HikariCP-5.1.0.jar:na]
	at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) ~[HikariCP-5.1.0.jar:na]
	at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:194) ~[hibernate-core-6.6.13.Final.jar:6.6.13.Final]
	... 76 common frames omitted

Now keeping springboot at 3.4.5 and if i downgrade hibernate alone from 6.6.13.Final to 6.5.3.Final by adding below to POM - then it works as before (save is successful and no error).

<dependency>
      <groupId>org.hibernate.orm</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>6.5.3.Final</version>
    </dependency>

this is the issue faced when upgrading springboot from 3.3.10 to 3.4.5 - which as per above steps seems to be due to hibernate.

I see from your pom.xml file you’re using H2 1.4. Hibernate 6 only supports versions after 2.1.214, so that already looks concerning. You should see a warning message in your logs about this.

Other than that, you entity mapping looks fine. I would ask you to try if the issue persists with a supported H2 version, and when using Hibernate only (no Spring). If it does, I would say this is a bug: please try to create a reproducer with our test case template and if you are able to reproduce the issue, create a new ticket in our issue tracker and attach that reproducer.

Thanks for your note. In H2 → 2.1.214 and above data type oid is not supported. In 2.1.214 - if I change data type to blob (in schema.sql) it works with H2.

I assume the original issue is because hibernate 6.x dont support H2 < 2.1.214