2013-10-30 2 views
0

파일을 데이터베이스 테이블에 byte[]으로 저장하려고합니다. 이제 Hibernate과 함께 을 postgres 데이터베이스 테이블에 저장하는 것과 관련된 질문이 있습니다. 그것은 byte[]에 대한 데이터 유형 byte을 보여줍니다 내 데이터베이스 테이블에서최대 절전 모드로 파일을 데이터베이스에 바이트 []로 저장하는 방법은 무엇입니까?

@Column 
private byte[] bytes; 

: 내 Entity 클래스에서이 구현이있다.

이제이 열 (내 경우에는 데이터베이스에 저장하려는 파일의 이름)에 plaintext이 표시됩니다. 각 바이트에 대해 데이터베이스 열의 파일 이름을 반복합니다. 하지만 왜?

또 다른 Hibernate 주석이 필요합니까?

도움 주셔서 감사합니다.

Greetz Marwief는

+0

일반적으로 파일을 데이터베이스에 저장하는 것은 좋지 않습니다. (IMO, 트랜잭션으로 파일을 작성하거나 업데이트해야하는 경우에만 좋습니다) –

답변

3

당신은 @Lob와 함께 필드에 주석을해야합니다.

참고 :

@Column(columnDefinition="LONGBLOB")//or VARBINARY(128) if you need a smaller limit 
+0

@Lob은 작동하지 않습니다. "예외는"열은 bytea 유형이지만 표현식은 bigint 유형입니다 " – Marwief

+0

전체 스택 추적을 원본 메시지와 함께 게시하십시오. 기존 열이 자동 생성 된 경우 삭제하는 것도 고려해 볼 수 있습니다. –

+0

나는 나의 대답을 고쳐야한다! 솔루션이 작동합니다! 열에 LOB 주석이있는 경우 얼마나 많은 바이트를 저장할 수 있는지 알고 있습니까? – Marwief

0
@Column(columnDefinition = "LONGBLOB") 
private byte[] bytes; 
0

Domain

import javax.persistence.Lob; 
    @Lob 
    private byte[] image; 

Repository layer

: 열이 자동 생성됩니다 경우 추가 주석 (MYSQL에 대한 예를) 열 정의를 설정하는 생각
byte[] image = getImageAsBytes(); 
    domain.setImage(image); 
    entityManager.save(domain); 

적어도 작동해야합니다. 특별한 마법 없음

관련 문제