티스토리 뷰

Spring/Hibernate

Hibernate : @Lob (Large Object)

Korean Eagle 2020. 7. 28. 16:33
728x90

0. LOB은 가변길의를 갖는 큰 데이터를 저장하는데 사용하는 데이터형이다.

  0-1 CLOB은 문자기반을 데이터를 저장하는데 사용된다.

  0-2 BLOB은 binary 데이터를 저장하는데 사용된다.

 

1. @Lob은 일반적인 데이터베이스에서 저장하는 길이인 255개 이상의 문자를 저장하고 싶을 때 지정한다.

2. 아래는 유저 엔티티를 데이터베이스에 저장하는 간단한 발췌인데, 유저는 이름과 사진을 정보를 가지고 있다.

 

// 유저 엔티티

@Entity
@Table(name="user")
@Data
public class User {

    @Id
    private Long id;

    @Column(name = "name", columnDefinition="VARCHAR(128)")
    private String name;
	
    @Lob
    @Column(name = "photo", columnDefinition="BLOB")
    private byte[] photo;
}


// 저장하는 코드 - 사진을 바이너리로 변환하여 저장하고 있다.
User user = new User();
		
InputStream inputStream = this.getClass()
  .getClassLoader()
  .getResourceAsStream("mypic.png");
 
if(inputStream == null) {
    fail("Unable to get resources");
}
user.setId(1L);
user.setName("pilseong");
user.setPhoto(IOUtils.toByteArray(inputStream));

session.persist(user);


3. @Lob은 스프링이 추론하여 어떤 타입으로 저장할지를 판단하는데,

  3-1 String과 char 를 기본으로 하는 타입을 제외하면 @Blob으로 사용된다.

728x90
댓글