-
7/6CodeStates_Backend/TIL (정제되지 않은 글들) 2022. 7. 6. 18:41
[굿모닝 - 황정식]
* JDBC 에서 @Id 는 스프링에서 제공하는것이고, JPA에서 @Id 는 javax에서 제공하는 것으로, 둘은 다름.
*오늘 실습할 것
-> 요 작은주제 두개 하면 됨. CoffeeRef랑 ORDER_COFFEE테이블이 필요할 것임.
-> Stamp 클래스도 새로 만들어줘야함.
*즉시 로딩, 지연 로딩
-> 즉시 로딩은 바로 가져오는 것이고, 지연로딩은 필요할 때 가져오는 것. 스트림, 리액터 등에서 다 사용되는 일반적인 프로그래밍 개념임.
*질문 : 엔티티 안 멤버변수를 원시형으로 할지 래퍼형으로 할지 선택하는 기준이 있나요? 예를들어 long memberId, Long memberId를 할지
-> 애매하다.. 왠만하면 원시타입으로 되는데,,,,, Optional을 쓰던가, Null을 특별히 처리하고싶던가 등 상황에 맞춰 쓰는 것이다. 뭐가 더 낫고 안낫고는 없다.
[오후 세션 - 황정식]
-> 현업에서 ddl-auto 는 권장되지 않음.
* @GeneratedValue 에 애트리뷰트 안붙히면 AUTO가 디폴트값임.
*질문 : IDENTITY 전략으로 하면 em.persist() 하면 바로 insert 쿼리가 날아가나요?
-> 알아보고 답 주겠다
* 질문 :sequence전략도 id값으로 1이 나오는데 auto, identity등과 같은 전략이랑 무엇이 다른건가요?? 같은거 아닌지 궁금합니다.
-> sequence는 데이터베이스 안에 sequence 테이블이 있는데 거기서 값을 미리 가져와서 기본키에 할당한 후 테이블에 넣는것이고 / identity 경우는 테이블에 저장한 후 그 순서대로 기본키에 할당하는 것.
* 1차 캐시에 유지되는 기간은 모르겠다고함. 찾아본다고 함.
* sequence전략은 시퀀스 얻을 때 한 번, 저장할 때 한 번 총 두번 DB에 접근하게 되겠네요.
* sequence를 사용하면 insert문을 몰아서 보낼 수 있겠네요 IDENTITY랑 다르게.
* identity는 persist할때 insert, sequence는 commit할떄 insert라 이해하면된다.
* 아래에서 length 는 보통 varChar로 설정됨.
* manytomany 구현 코드
저 @JoinColumn의 애트리뷰트 name이 Member의 memberId 라는 이름 그래도 쓰지 않아도 됨. 오히려 이 name어트리뷰트가 더 우선순위가 높음. @Id라는 애너테이션에 의해 자동 결합됨.
-> 테이블 생성시 컬럼명은, 위 @Column 에서 애트리뷰트로 name 으로 지정해줄 수도 있고, 아니면 변수명이 카멜케이스든 언더바든 다 언더바 스타일로 생성됨. 위에 보면 created_at 보이지? 또는 CREATED_AT으로도 됨.
-> 여기서 stamp는 그냥 외래키 설정을 위한 것이지, DB에 컬럼으로 추가하는 것이 아님.
'CodeStates_Backend > TIL (정제되지 않은 글들)' 카테고리의 다른 글
7/8 (0) 2022.07.08 7/7 (0) 2022.07.07 7/5 (0) 2022.07.05 7/4 (0) 2022.07.05 7/1 (0) 2022.07.01