반응형 개발128 [jpa] 프록시란 ? 프록시란 ? - 실제 엔티티 대신에 사용되는 객체로서, 원본 엔티티를 상속받는다. 그렇기때문에 타입체크시에 주의해야함. 프록시의 특징 - 프록시 객체는 처음 사용할때 한번만 초기화된다. - 프록시 객체를 초기화 할 때, 프록시 객체가 실제 엔티티로 변환되는것이 아니라 프록시 객체를 통해서 실제 엔티티 객 체에 접근이 가능한 것이다. - 영속성 컨텍스트에 실제 엔티티가 이미 존재한다면 getReference()를 호출해도 실제 엔티티를 반환 프록시 사용 - 지연로딩때 사용된다. 출처 : 인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 [김영한] 2020. 1. 5. [JPA] @MappedSuperclass 특징 @Map@MappedSuperclass 특징 1. 상속관계 매핑이 아니다. 2. 조회가 불가능하다 3. 직접 생성해서 사용할일은 거의 없으므로 추상클래스로 만드는것을 권장한다. 4. 테이블과 관계없으며 여러엔티티에서 공통으로 사용하는 매핑정보를 모으는 역할을 한다. ※참고사항 : @Entity클래스는 @Entity나 @MappedSuperclass 로 지정한 클래스만 상속가능하다. 2020. 1. 2. [JPA] 상속매핑 종류와 특성 조인전략 (정석) 장점 - 정규화가 되어있다 - 외래 키 참조 무결정 제약조건 활용가능 - 저장공간의 효율화 단점 - 조회시 조인을 사용하기때문에 쿼리가 복잡하며 성능이 저하 - 데이터 저장시 insert sql 2번 호출 (부모, 자식을 넣어야하기때문) 단일테이블 전략 장점 - 조인이 필요없으므로 조회성능 빠름 - 조회쿼리 단순함 단점 - 자식 엔티티의 컬럼 null 허용 - 단일 테이블에 모든것을 저장하므로 테이블이 커질수도 있으며 상황에 따라서 성능저하가 올 수 있다. 구현 클래스마다 테이블 전략 - 사용추천하지않음 2020. 1. 2. [JPA] @DiscriminatorColumn 속성 상속관계 매핑을 할때 사용되는 속성이다. 예를들어 아래와같이 Book 엔티티와 MAGAZINE 엔티티가 ITEM 엔티티를 상속받을때 ITEM에 @DiscriminatorColumn 속성을 추가하게 된다면 DTYPE 속성이 추가되어 BOOK과 MAGAZINE중에 어느 엔티티때문에 추가가 되었는지 알 수 있다. 기본값으로 DTYPE에는 엔티티의 이름으로 추가가되는데 @DiscriminatorValue 어노테이션을 사용하게 된다면 사용자가 직접 설정할수도 있다. 예를들어 BOOK때문에 추가될때는 ByBook , MAGAZINE때문에 추가할때는 ByMagazine 이라는값으로 설정하고싶을때 @DiscriminatorValue("ByBook") @DiscriminatorValue("ByMagazine") 이런식으.. 2020. 1. 2. [JPA] 일대일 매핑 외래키 관리 주 테이블에 외래키가 있는경우 장점 : 주 테이블만 조회해도 대상 테이블에 데이터가 있는지 없는지 판별가능 단점 : 외래키에 null값 허용 대상 테이블에 외래키가 있는경우 장점 : 관계를 1:1에서 1:N으로 변경할때 테이블 구조 유지 가능 단점 : JPA의 기본 프록시기능의 한계로 지연로딩으로 설정해도 항상 즉시로딩된다. 2020. 1. 1. [JPA] 일대다 관계 설정시 주의사항 - 1:N 에서 1이 연관관계의 주인이 되는 설정인데 실제 테이블에서는 N쪽이 외래키를 가지고있음. 그렇기때문에 원치않는 update 쿼리가 추가로 실행될 수 있음 - @JoinColumn 을 꼭 사용해야한다. 그렇지않으면 중간테이블을 하나 생성해서 사용한다. 1:N 보다는 N:1 매핑을 사용하는것이 낫다! 2020. 1. 1. [JPA] 양방향 연관관계 설정시 주의사항 1. 최대한 단방향으로 처리할것 (어쩔수 없는경우에만 양방향 연관관계 사용) 2. 주인을 외래키 있는곳으로 지정할 것 3. 양방향 매핑시 무한루프 주의 (toString, lombok, JSON 생성 라이브러리) → toString 사용자제 → lombok에서 toString 생성은 빼고 사용 → 데이터를 주고받을때 엔티티를 사용하지말고 DTO를 만들어서 사용하자 2019. 12. 31. [JPA] spring.jpa.hibernate.ddl-auto=update 주의사항 컬럼추가시에는 추가가되지만 존재하던 컬럼 삭제시에는 적용되지않는다. 2019. 12. 26. [spring boot] war 파일 생성 1. build.gradle파일 수정 2. SpringBootServletInitializer 상속 3. war 파일 생성 더블클릭하면 프로젝트경로\build\libs 에 war파일이 생성된다. 2019. 12. 23. [spring boot] src/main/resources 접근하기 (org.thymeleaf.exceptions.TemplateInputException) src/main/resources 하위에 있는 main.html 에 접근하고 싶을때가 있을거다 src/main/resources 하위에 있는 main.html 에 접근하기 위하여 위와 같이 작성을 하고 실행을 하게되면 org.thymeleaf.exceptions.TemplateInputException 오류를 마주하게 될것이다. 해결방법은 간단하다. Gradle파일에 thymeleaf 설정을 해주기만 하면된다. 위와 같이 타임리프를 implementation 해준후 buile clean을 해준 후 다시 실행을 하면 정상적으로 작동한다! 2019. 12. 18. [javascript] after() after() method는 뒤에 Node를 추가할수 있는 method이다. 화면이 이렇게 있을때 1. 답글쓰기를 누르면 temp에 할당 2. 댓글을 달 수 있는 폼(div)를 만들어서 div라는 변수에 할당을 했다고 가정한다. 답글쓰기를 누르면 이런식으로 누른곳 바로 뒤에 form이 추가된다. 이런식으로 다음 Element가 있다면 다음의 다음의 추가하고 없다면 바로 뒤에 추가하는식으로 응용을 할 수 있다. 2019. 12. 11. [javascript] nextElementSibling 한줄요약 : nextElementSibling method는 다음 Element를 반환해주는 method이다. 응용 : 있는지 없는지, 어떤것이 있는지에 따라서 응용가능 화면에 보면 맨위 댓글의 답글쓰기는 다음 Element가 있고 두번째 댓글의 답글쓰기는 다음 Element가 없다. Javascript의 nextElementSibling는 다음 Element가 있으면 다음 element를 없으면 null을 반환해준다. 2019. 12. 11. 이전 1 ··· 7 8 9 10 11 다음