#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 на стороне сервера не суперпользователям, но требуется тщательное рассмотрение последствий для безопасности.
Каким может быть решение моей проблемы?