쿼리DSL를 쓰기 위해서는 pom.xml에 추가하기(maven) dependency 추가 com.querydsl querydsl-jpa com.querydsl querydsl-apt plugin 추가(plugins태그 안에) com.mysema.maven apt-maven-plugin 1.1.3 process target/generated-sources/java com.querydsl.apt.jpa.JPAAnnotationProcessor Maven > Lifecycle > compile 해야 함..! 쿼리dsl은 build를 시켜야 사용할 수 있음. 엔티티가 다 인식이 되어서 Q가 붙는다. >> querydsl에서 사용하는 객체 엔티티들을 빌드를 통해서 따로 만들어 놓는다. (target에서 실제 경로..
레포지토리가 만들어주는 메소드가 아닌 쿼리메소드로 쓰기엔 너무 길어지거나 불가능할 땐, 쿼리 어노테이션의 JPQL을 사용함. mybatis는 영속성 컨텍스트 없음. mybatis와 jpa같이 사용 가능. xml에 있는 쿼리를 mapper에서 실행하고 mapper를 사용하면 됨. 끝. mapper interface를 dao에서 사용함. dao가 jpa에서는 repository로 대체가 된다. 커스텀레포지토리 spring data jpa, 순수 jpa랑 같이 써야 할 때 jpa랑 mybatis랑 같이 써야 할 때,.... 우리가 직접 interface를 따로 만들어서 레포지토리에 상속시켜주는 것임.. ** mybatis 설정 config > MyBatisConfig application.properties ..
여기서 양방향이라고 가정하면, Owner.java pet -> owner owner -> pet 단방향2개 >> 연관관계의 주인을 찾아야 한다. select일 때는 상관없으나, insert, update, delete일 경우, 복잡성이 증가 하기 때문 pet안에 있는 owner_id(fk)를 관리하는 객체를 연관관계의 주인이라고 하며, owner객체가 연관관계의 주인이다! pet안에 있는 owner를 통해서만 insert, update, delete 접근할 수 있게 해준다. 반대방향으로 접근하지 못하게 한다. mappedBy = "owner"
pet에서만 owner에 접근 가능 다대일 연관관계 단방향 관계(n:1) pet은 여러마리고 owner 1명 >> @ManyToOne pet을 호출했을 때 거기에 있는 주인도 쓸 수 있다. @JoinColumn(name = "OWNER_ID") name에는 엔티티의 pk 컬럼명을 써줘야 함. 즉시로딩(EAGER) : 미리 다 로딩을 해놓기 때문에 필요한지 필요하지 않은지 모르니까 일단 다 조인해서 가져옴. 성능이 안 좋다. 실무에서 사용금지! 지연로딩(LAZY) : 내가 필요할 때 다시 쿼리문이 나가는 것. 로딩을 fetch라는 옵션으로 줄 수 있다. 지연로딩 : 기존의 엔티티를 상속받은 proxy객체가 들어가 있음. proxy에는 id값만 들어가 있고 나머지 컬럼은 null임. 즉시로딩 : 처음에 싹다..
상속과 연관관계는 다르다. 연관관계 : 의존성에 관련됨. RDB는 관계를 맺는 순간 양방향 객체는 양방향은 없음. 무조건 단방향만 있음. >> 자바는 단방향2개로 해결 객체는 참조로 접근(마침표 . 안에 .안에) RDB는 FK로 접근 다양성도 고려해야 함. 1:n n:1 n:n 단방향2개? 양방향1개? > 누가 FK관리하는지가 중요 > 테이블상 안에 FK가 있는 테이블이 FK를 관리 > 연관관계의 주인은 테이블 안에 있는 FK 객체가 주인임. 항상 n 쪽이 FK가 있는 것임. > n쪽의 FK를 연관관계의 주인으로 설정하고 반대편에 있는 객체는 주인에 속해있는 것임. PET이 FK를 관리하고 FK인 OWNER가 연관관계의 주인이다. OWNER테이블은 주인 안에 속해 있는 것이다. //setting > in..
11월 30일.. 설계가 끝나고 백작업들어가야하는데.. 어떻게 해야 할 지 모르겠어서.. 강의들으면서 복습중이다.. 설계할 때 임베디드를 쓸만한 곳이 없다고 생각해서 안 썼는데 그게 좀 아쉽다. 임베디드랑 맵드슈퍼클래스 다 써볼걸.. 공통으로 통채로 묶어서 사용할 만한게 없다고 생각했는데 화면 페이지 만들 때 공통 요소들을 묶어서 만들었다면 임베디드를 쓸 수 있었을 것 같다는 생각도 들지만, 막상 만들어도 공용으로 사용할 부분이 없으니,, 안 쓰는 게 맞는 건가 싶기도 하고,, 아리송~
27~36번처럼 직접 넣을 필요가 없음. 22~25번처럼 어노테이션만 쓰면 되는데 spring data jpa이다. 어노테이션을 쓰는 게 auditing이다. @EntityListeners(AuditingEntityListener.class)를 사용해줘야 함. DB에서 insert나 update된게 listener가 감지해서 now를 주입을 해주는 것임. Application에서 @EnableJpaAuditing 을 붙여주어서 spring한테 auditing 허락을 받아야 사용가능하다.
모듈화 방식 : jpa가 봤을 때는 1,2번 차이가 없어야 한다. db에서는 하나의 테이블의 동일한 컬럼일 뿐. 1. 임베디드 DB는 변하는 것이 없고 java에서 편하게 쓰는 것일 뿐임. @Embeddable : 선언할 때, 나 추가될 수 있어 @Embedded : 모듈을 사용할 때, 나 추가됐어 상속이 아니다. 필드(객체)를 모듈화한 것임. 분리한 것임. 다른 곳에서도 재사용할 수 있음. 임베디드 : 기존에 있는 것에서 새로운 것을 추가하는 것임. 필드 하나하나를 접근해서 쓰지 않고, 묶어서 통채로 가져올 때 사용한다. 2. MappedSuperclass Inheritance : 상속관계, RDB에서도 상속관계 @Entity 사용 period : 부모x, 재사용하기 위함. 임베디드와 비슷한 성격. 상..
자바에만 상속의 개념이 있고, RDBMS에는 상속의 개념이 없다. 이를 해결하기 위해 3가지 방법이 있다. 1.joined 2.singletable 3.tableperclass (거의 사용안함) @Inheritance(strategy = InheritanceType.JOINED) joined가 디폴트, joined에서 부모엔티티에서 @DiscriminatorColumn(name = "") // Dtype이 default 자식엔티티에서 @DiscriminatorValue("") // 컬럼에서 나타낼 값을 쓰면 된다. 부모엔티티에서 @Inheritance(strategy = InheritanceType.JOINED) 추가 abstract 붙이기 상속관계에서는 @Entity를 붙여주어야 한다. Employee..