Весна: «Переходим в спящий режим.Исключение HibernateException: Не удается получить доступ к потоку lob» при использовании другого пользователя postgresql

#java #spring #postgresql #hibernate

Вопрос:

Я хочу показать файлы, хранящиеся в базе данных postgresql. Это подробная информация о моем столе:

 => d files;

 id            | bigint                      |           | not null |
 data          | text                        |           |          | 
 

У меня есть следующая сущность spring

 @Entity
@Table(name = "files")
@Immutable
public class File {
    @Id
    @Column(name="id")
    private Long id;
    @Lob
    private byte[] data;
    // getters, setters, constructors
}
 

Я использую CrudRepository для этого репозитория сущности. Я получаю доступ к файлу таким образом с контроллера:

 byte[] fileBase64Data = file.getData();
byte[] decoded = Base64.getDecoder().decode(fileBase64Data);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", fileInfo.getContentType());
return ResponseEntity.status(HttpStatus.OK).headers(headers).body(decoded);
 

Но я получаю следующую ошибку, когда пытаюсь получить доступ к файлу как обычный пользователь postgresql, отличный от того, который использовался для создания файла.

 Hibernate: select file0_.id as id1_0_, file0_.data as file_dat2_0_ from files file0_ where file0_.id=?
org.springframework.orm.jpa.JpaSystemException: Unable to access lob stream; nested exception is org.hibernate.HibernateException: Unable to access lob stream
 

Я попытался добавить следующие свойства

 spring.datasource.autoCommit=false
spring.datasource.hikari.auto-commit=false
 

Я также попытался @Transactional сделать аннотацию. Но все равно получаю ту же ошибку. Я могу использовать lo_get для доступа к файлам со своей стороны, но я не хочу этого делать из-за этого предупреждения из документа postgresql:

Можно разрешить использование функций lo_import и lo_export на стороне сервера не суперпользователям, но требуется тщательное рассмотрение последствий для безопасности.

Каким может быть решение моей проблемы?