목록Database/JPA, ORM (14)
ecsimsw
JpaAuditing / 컬럼 생성일, 수정일 자동 저장 1. @EntitiyListeners(AuditingEntityListener.class) @Entity @Getter @EntityListeners(AuditingEntityListener.class) public class Post{ @Id @GeneratedValue private Long id; private String category; private String writer; private String title; private String content; @CreatedDate private LocalDateTime createdDateTime; @LastModifiedDate private LocalDateTime modifiedDa..
변경 감지와 병합 JPA는 영속성 context에 테이블 형태의 1차 캐시를 두고 엔티티를 저장해서, Transaction commit 시, 1차 캐시의 영속된 값과 현재 entity 값을 비교하여 변경이 된 것을 알아서 적용해준다. 준영속 상태의 엔티티 아래 코드를 가볍게 보면, PostMapping으로 "members/memberId/editName" 요청을 받아 파라미터로 넘겨 받은 MemberNameEditForm의 form데이터로 item 값을 넣어줘서 form의 id에 해당하는 member의 Name을 set했다. 이후에 transaction이 commit되면, 알아서 변경 감지가 일어날 것이라고 생각한 잘못된 코드이다. // 준영속 상태를 생각하지 않은 엔티티 값 수정 @PostMapping..
질문 1. 현재 member의 소속 여부에 대한 처리 이를 테면 "Order" 엔티티 클래스에서, member가 orders에 현재 속하고 있는지 확인하고 만약 그렇다면 해당 Orders에서 member를 제거 후 변경된 member를 추가해야하는 것은 아닌지. public void setMember(Member member){ /* if(this.member.getOrders() != null){ this.member.getOrders().remove(this); } */ this.member = member; member.getOrders().add(this); } 그렇지 않으면 특이사항 이겠지만, Order의 member를 변경할 때 member.orders에서 문제가 생기지 않은가 싶어서 주석 부..
순수 객체를 고려한 양방향 연관 아래 코드에서 출력되는 member는 0개이다. 매니저를 flush하기 전에는 버퍼에 sql이 저장되어만 있기 때문이다. Member memberA = new Member(); memberA.setName("memberA"); memberA.setTeam(teamA); for(Member m : teamA.getMembers()){ System.out.println(m.getName()); } 객체를 고려하여 양방향 연관을 구현하려면 teamA에도 member를 넣어줘야한다. 물론 그게 멤버 엔티티의 수정을 만들지는 않지만. Member memberA = new Member(); memberA.setName("memberA"); memberA.setTeam(teamA); ..
보호되어 있는 글입니다.
"T아카데미 / JPA 프로그래밍 기본기 다지기 - 김영한 " 강좌를 듣고 정리한 글입니다. 변경 감지 아래 코드에서 SQL 버퍼, 쓰기 지연으로 memberA의 team 조회가 sql 쿼리보다 빠르고, INSERT table 쿼리가 한개 뿐이며, sql쿼리보다 탐색이 빠름에도 불구하고 1차 캐시로 memberA의 팀 조회가 가능하다는 것을 알 수 있다. Team teamA = new Team(); teamA.setName("TeamA"); em.persist(teamA); Team teamB = new Team(); teamB.setName("TeamB"); em.persist(teamB); Member member_A = new Member(); member_A.setName("memberA"); m..
"T아카데미 / JPA 프로그래밍 기본기 다지기 - 김영한 " 강좌를 듣고 정리한 글입니다. 영속성 컨텍스트를 영속성 컨텍스로 관리하면 어떤 이점을 갖을까 1. 1차 캐시 / 엔티티 동일성 보장 2. 쓰기 지연 4. 로딩 지연 5. 변경 감지 1차 캐시 / 엔티티 동일성 보장 영속성 컨텍스트는 내부에 캐시를 갖고 있다. (id, instance)의 맵 형태를 갖고 엔티티들이 저장된다. 트렌젝션 단위의 굉장히 짧은 메모리 공간이다. em.persist(member)로 member가 영속성 컨텍스트에 영속되면, 1차 캐시는 이를 담는다. 이후 조회 시, DB에 접근해서 member1를 탐색하는 것이 아니라 1차 캐시를 먼저 훝어 member1을 바로 찾을 수 있고, 캐시에 없다면 DB에서 검색 후 해당 객체..
"T아카데미 / JPA 프로그래밍 기본기 다지기 - 김영한 " 강좌를 듣고 정리한 글입니다. 영속성 컨텍스트 : 엔티티를 영구 저장하는 환경이라는 뜻. 엔티티 매니저를 생성할 때, 영속성 콘텍스트가 하나 생성된다. 엔티티 매니저를 통해 영속성 컨텍스트를 관리한다. 엔티티의 생명 주기 1. 비영속 : 객체를 생성, 설정만 하고 영속성 컨텍스트에 넣지 않은 상태 2. 영속 : 영속성 컨텍스트에 저장되어 관리되는 상태 3. 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태 4. 삭제 : 삭제된 상태