최대 절전 모드를 사용하여 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
'sourcecode' 카테고리의 다른 글
개별 열 형식 없이 sqlplus 열 이름 자르기 방지 (0) | 2023.09.26 |
---|---|
문자열 변환이 있는 경우 wpml-config.xml의 용도는 무엇입니까? (0) | 2023.09.26 |
jquery - 성공 시 ajax 결과를 사용한 반환 값 (0) | 2023.09.26 |
MySQL - varchar 열에서 숫자 값만 선택 (0) | 2023.09.26 |
현재 암호를 모르는 경우 asp.net 멤버십 제공자를 사용하여 해시 암호를 변경하는 방법은 무엇입니까? (0) | 2023.09.26 |