제목 그대로이다. 자바 String 은 몇 글자부터 DB에 못들어가고 @Lob
을 써야 할지 알아보겠다.
Item item=new Item();
item.setName("ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP" +
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNO");
item.setPrice(3000);
item.setStockQuantity(15);
em.persist(item);
System.out.println(item.getName().length());
위에서 이름은 그냥 String name
으로 하였다.
item의 이름의 길이는 출력결과
255였고 잘 들어가있는 것을 볼 수 있다.
그런데!!!
256글자가 된다면??
이렇게 DB는 텅 비어버리게 되고
em.persist(member)와 em.persist(team) 등 em.persist(item)보다 아래에 있던 테이블은 insert 쿼리 조차 안나갔다.
Hibernate:
call next value for hibernate_sequence
256
Hibernate:
call next value for hibernate_sequence
Hibernate:
call next value for hibernate_sequence
Hibernate:
call next value for hibernate_sequence
Hibernate:
/* insert jpa_book_dionisos198.domain.Item
*/ insert
into
Item
(name, price, stockQuantity, ITEM_ID)
values
(?, ?, ?, ?)
이것이 쿼리의 전부였다.
그렇다면 @Lob을 붙여보자
@Lob
private String name;
이렇게 실행을 해보면
다른 쿼리들과 함께 다른 table의 insert 문도 아래와 같이 나가고
/* insert jpa_book_dionisos198.domain.Item
*/ insert
into
Item
(name, price, stockQuantity, ITEM_ID)
values
(?, ?, ?, ?)
Hibernate:
/* insert jpa_book_dionisos198.domain.OrderItem
*/ insert
into
OrderItem
(count, ITEM_ID, ORDER_ID, orderPrice, ORDER_ITEM_ID)
values
(?, ?, ?, ?, ?)
Hibernate:
/* insert jpa_book_dionisos198.domain.Member
*/ insert
into
Member
(city, name, street, zipcode, MEMBER_ID)
values
(?, ?, ?, ?, ?)
Hibernate:
/* insert jpa_book_dionisos198.domain.Order
*/ insert
into
ORDERS
(member_ID, orderDate, status, ORDER_ID)
values
(?, ?, ?, ?)
아래와 같이 잘 들어간다는 것을 볼 수 있다.