LOG
- 베로위키 다시 영업합니다 구경 자주 오세요~
- 어제, 그저께, 토요일까지 술을 너무 많이 마셨다 ㅋㅋ.. 술 자제해야 되는데 금요일에도 데모데이 회식이라 술 마시러 간다. 아무래도 자제하자...
- 백엔드 코드 스타일 컨벤션 회의를 했다. 오랜만에 코드를 보니까 좀 기뻤다 ㅋㅋㅋ
배운 것
- JPA ddl-auto는 create-drop이 default 값이다.
- JPA Entity는 인자가 없는 생성자가 필요하다.
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
를 설정하면 ?에 뭐가 들어갔는지 알 수 있다.2023-07-04 11:20:56.885 TRACE 58373 --- [ Test worker] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARCHAR] - [잠실역]
@DataJpaTest
에는@Transactional
이 붙어 있어서 rollback이 된다.
2023-07-04 11:24:10.786 INFO 58396 --- [ Test worker] o.s.t.c.transaction.TransactionContext : Began transaction (1) for test context [DefaultTestContext@1dd81a80 testClass = StationRepositoryTest, testInstance = subway.StationRepositoryTest@1de344a0, ...
hibernate log
2023-07-04 11:24:10.938 INFO 58396 --- [ Test worker] o.s.t.c.transaction.TransactionContext : Rolled back transaction
-
영속성 컨텍스트: 엔티티를 영구 저장하는 환경. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 저장한다.
-
영속성 컨텍스트는 동등성을 보장해준다.
@Test
void identity() {
Station station1 = stations.save(new Station("잠실역"));
Station station2 = stations.findById(station1.getId()).get();
assertThat(station1 == station2).isTrue();
}
- 영속성 컨텍스트는
ConcurrentHashMap
으로 구현되어 있다. - 영속성 컨텍스트는 id 조회 시에 DB를 바로 조회하지 않고, 먼저 1차 캐시를 확인한 후 있으면 그대로 리턴해준다. 1차 캐시에 없는 값은 DB에서 select 후, 1차 캐시에 저장한다.
- 엔티티의 생명 주기
- 비영속 : 영속성 컨텍스트와 전혀 관계가 없는 상태
- 영속 : 영속성 컨텍스트에 저장된 상태
- 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태
- 삭제 : 삭제된 상태
@Transactional
에서 트랜잭션을 커밋하는 순간, 영속성 컨텍스트를 DB에 반영한다.- 이 경우, update query가 날아간다. 조회하기 전에 변경 사항이 있으면 update 한다.
@Test
void update() {
Station station1 = stations.save(new Station("잠실역"));
station1.changeName("선릉역");
Station station2 = stations.findByName("선릉역");
assertThat(station2).isNotNull();
}
update
station
set
name=?
where
id=?
- 이 경우는 update query가 날아가지 않는다.
@Test
void update() {
Station station1 = stations.save(new Station("잠실역"));
station1.changeName("선릉역");
// Station station2 = stations.findByName("선릉역");
// assertThat(station2).isNotNull();
}
- flush 는 영속성 컨텍스트가 관리하는 객체의 변화를 DB에 반영하겠다는 것. commit은 트랜잭션의 관점.
- 해보니까 이슈, discussion 삭제 됩니다 ㅋㅋ by 주노
- 원래는 권한이 없어서 안 됐던 거 같기도 하고 아니면 내가 연 이슈가 아니어서 그런 거 같기도 하고 검증 필요
궁금한 것
- 내 안경은 왜 계속 휘어질까
느낀 것
- 비가 너무 많이 와서 찝찝했다. 내일까지는 비가 올텐데 진짜 싫다;; 언제까지 여름이야...
- 회의가 많으니까 시간은 잘 가는데 에너지 소모가 심하다.
- 바론이 빅파이를 사와서 맛있게 먹었다. 간식 가져와 준 바론 고마워 😄