sourcecode

최대 절전 모드를 사용하여 blob 데이터를 청크 단위로 읽기/쓰기

copyscript 2023. 9. 26. 22:29
반응형

최대 절전 모드를 사용하여 blob 데이터를 청크 단위로 읽기/쓰기

A에서 읽고 쓸 수 있는 방법이 있습니까?blob을 사용하여 덩어리로Hibernate. 지금은 내가.OutOfmemoryException왜냐하면 블롭 데이터 전체가 메모리에 로드되기 때문입니다.byte[].

좀 더 구체적으로 말하자면, 큰 파일을 다음과 같은 데이터베이스 테이블에 저장하고자 합니다.File.

public class File {
   private byte[] data;
}

FileInputStream에서 파일을 연 다음 무엇을 합니까?Hibernate에 컨텐츠 스트리밍이 필요하고 전체를 제공하지 않을 것을 알려주는 방법byte[]한 번에 준비?사용할까요?Blob대신에byte[]? 어쨌든 콘텐츠를 스트리밍하려면 어떻게 해야 합니까?

읽기와 관련하여, 동면 상태를 알 수 있는 방법이 있습니까? (게으른 로딩 외에) blob을 덩어리로 로딩해야 하므로 검색 시File그것은 나에게 주어지지 않을 것입니다.OutOfMemoryException.

사용 중인 항목

  • 오라클 11.2.0.3.0
  • 동면 4.2.3 결승
  • Oracle 드라이버 11.2

블롭 루트에 가면 하이버네이트를 사용해 본 적이 있습니까?LobHelper createBlob 메서드는 다음을 수행합니다.InputStream? Blob을 만들고 데이터베이스에 지속하려면 FileInputStream 개체와 바이트 수를 제공해야 합니다.

File bean/entity 클래스는 다음과 같이 Blob을 매핑할 수 있습니다(JPA 주석 사용).

@Lob
@Column(name = "DATA")
private Blob data;

// Getter and setter

그리고 비즈니스 로직/데이터 액세스 클래스는 데이터베이스를 유지하기 전에 입력 스트림을 닫지 않도록 주의하면서 빈/엔티 개체에 대해 이와 같은 Blob을 생성할 수 있습니다.

FileInputStream fis = new FileInputStream(file);
Blob data = getSession().getLobHelper().createBlob(fis, file.length());
fileEntity.setData(data);
// Persist file entity object to database

반대로 데이터베이스에서 Blob을 청크의 스트림으로 읽으려면 Blob의 getBinaryStream 메서드를 호출하여 InputStream을 제공하고 필요한 경우 나중에 버퍼 크기를 설정할 수 있습니다.

InputStream is = fileEntity.getData().getBinaryStream();

Struts 2에는 InputStream 결과의 버퍼 크기를 설정할 수 있는 편리한 구성이 있습니다.

언급URL : https://stackoverflow.com/questions/20614973/read-write-blob-data-in-chunks-with-hibernate

반응형