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