상속과 연관관계는 다르다. 연관관계 : 의존성에 관련됨. 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..
* 페이징 SuperCarDAO.java alt+enter > inject language > jpql 엔터 > 쌍따음표안에서 색깔 표시 가능 정렬을 해야 최신순으로 나옴. SuperCarTest.java (1, 10) > 1번부터 10개 뽑기(1페이지) (10, 10) > 10번부터 10개 뽑기(2페이지) * 수정(벌크연산) 하나만 수정할 때는 setter를 쓰면 되지만, 한번에 여러 개 수정할 때, ex) 자동차 금액 전체 10% 인상, 벌크 연산을 사용해야 한다. 벌크연산 : 영속성 컨텍스트를 무시하고 SQL 반영된다. 영속성 컨텍스트와의 불일치(디비만 반영된 상태) 무조건 영속성 컨텍스트를 비워주고 벌크연산을 해야 한다!! SuperCarDAO.java executeUpdate : insert, ..
스프링 프로젝트 설계중인데, 엔티티를 만들고 있는데 not null 제약조건을 주기 위해서 @Column(nullable = false)를 썼는데 다른 팀에서는 @NotNull을 준 걸 봤다. 둘다 null을 허용하지 않는 건데 뭐가 다를까? 검색검색ㄱㄱㄱ 결론적으로 nullable = false 보다 @NotNull을 추천하고 있다. @NotNull 어노테이션을 쓰면, 데이터베이스에 SQL 쿼리를 보내기 전에 예외가 발생한다. JPA의 Repository 인터페이스가 잘못된 Entity를 저장할 때, ConstraintViolationException을 발생시킨다. (그 때문에, @Valid나 @Validated 없이도 엔티티를 자연스럽게 검증할 수 있다) 물론 값이 검증에 맞지 않아도 객체를 생성하는..