getSingleResult() не может получить тип данных oid в postgres

Рейтинг: -1Ответов: 1Опубликовано: 17.06.2023

В классе для тестирования (junit) кладу в БД данные, среди которых есть тип данных oid (description) без ошибок:

insert into production_studios(id, name, description, date_foundation)
values ('2','Name', '12345','2022-08-14'); 

Затем пытаюсь эти данные получить:

 Hibernate: 
        select
            p1_0.id,
            p1_0.date_foundation,
            p1_0.description,

            p1_0.name 
        from
            production_studios p1_0
    
    jakarta.persistence.PersistenceException: Converting `org.hibernate.HibernateException` to JPA `PersistenceException` : Unable to extract JDBC value for position `3`

Код, в котором вылетает ошибка:

 ProductionStudio productionStudio = entityManager.createQuery("select m from ProductionStudio m", ProductionStudio.class).getSingleResult();
  

Модель:

package com.example.cinema.base.models.entitys;

import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Lob;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.Hibernate;

import java.time.LocalDate;
import java.util.Objects;

@Entity
@Table(name = "production_studios")
@Getter
@Setter
public class ProductionStudio {

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

    @Column(name = "date_foundation")
    private LocalDate dateFoundation;

    @Lob
    private String description;

    private String name;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
        ProductionStudio that = (ProductionStudio) o;
        return id != null && Objects.equals(id, that.id);
    }

    @Override
    public int hashCode() {
        return getClass().hashCode();
    }
}

Так выглядят типы данных в Postgres:

Запись в БД postgres

Как получить из БД decription типа oid без ошибок и корректно написать запрос для getSingleResult()?

Ответы

▲ 0

Нужно в модель к атрибуту description добавить аннотацию @JdbcTypeCode

@Lob
@JdbcTypeCode(SqlTypes.LONGVARCHAR)
private String description;

И тогда в БД поменяется тип данных с oid на character varying, соответственно и ошибки не будет. введите сюда описание изображения