일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Remember-me
- orphanRemovel
- 세션 고정 보호
- 즉시 로딩
- jpa
- 상속관계 매핑
- SessionManagementFilter
- MySQL
- 양방향 매핑
- 임베디드 타입
- Database
- 객제지향 쿼리 언어
- concurrentsessionfilter
- spring jpa
- 다대다
- 세션 생성 정책
- JPQL
- AnonymousAuthenticationFilter
- TABLE
- 값 타입 비교
- ddl-auto
- Spring Security
- 기본값 타입
- 동시 세션 제어
- field column mapping
- 값 타입 컬렉션
- @MappedSuperclasss
- form login
- 지연 로딩
- 기본 키 매핑
- Today
- Total
목록전체 글 (38)
hoondev
임베디드 타입(복합 값 타입) 새로운 값 타입을 직접 정의할 수 있음 JPA는 임베디드 타입(embedded type)이라 함 주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 함 int, String과 같은 값 타입 사용방법 다음과 같은 Member엔티티에서 공통으로 묶을 수 있는 부분을 찾아보자. @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "username") private String username; private LocalDateTime startDate; private LocalDateTime endDate; private String city; private String stree..
엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 생명주기를 엔티티에 의존한다. 예) 회원을 삭제하면 이름, 나이 필드도 함께 삭제된다. 값 타입은 공유하면 안된다. 예) 회원 이름 변경시 다른 회원의 이름도 함께 변경되면 안된다. Reference https://www.inflearn.com/c..
영속성 전이 영속성 전이는 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만드는 것이다. @Entity public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent") private List childes = new ArrayList(); public void addchild(Child child) { childes.add(child); child.setParent(this); } } @Entity public class Child { @Id @GeneratedValue private Long id; private String name; @Many..
지연로딩 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @ManyToOne(fetch = FetchType.LAZY) //지연 로딩 @JoinColumn(name = "TEAM_ID") private Team team; .. } 이 member객체를 조회할때 member의 정보만 조회하는데 team까지 조회하면 손해일 것이다. 그래서 JPA는 지연로딩을 지원한다. 즉 Member와 Team이 지연로딩으로 설정이 되어있으면 멤버는 팀의 프록시 개체만 조회하다가 실제 Team을 사용하는 시점에서 초기화한 후 사용한다. 즉시 로딩 @Entity publ..
프록시 jpa에서 em.getReference()를 사용하면 데이터베이스의 조회를 미루는 프록시 엔티티를 조회할 수 있다. 프록시의 특징 실제 클래스를 상속 받아서 만들어짐 실제 클래스와 겉 모양이 같다 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 됨(이론상) 프록시 객체는 실제 객체의 참조(target)를 보관 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 Member member = em.getReference(Member.class, “id1”); member.getName(); getName() 메서드를 호출할때 다음과 같은 일이 벌어진다. getName()을 호출하면 프록시 객체의 target을 조회한 후 null이면 영속성 컨텍스트 초기화를 요청한다..
@MappedSuperclass 공통 매핑 정보가 필요할 때 사용한다. 실제 테이블과 매핑되지 않는다. @MappedSuperclass public abstract class BaseEntity { @Id @GeneratedValue private Long id; private String name; ... } @Entity public class Member extends BaseEntity { private String email; } @Entity public class Seller extends BaseEntity { private String shopName; } 이렇게 하면 테이블에 BaseEntity의 id, name을 상속 받게 된다. BaseEntity는 엔티티가 아니고 테이블과 매핑되지..
상속관계 매핑 객체는 상속 관계가 있지만 데이터베이스에는 없다. 하지만 데이터베이스에도 상속과 유사한 모델링 기법이 있는데 바로 슈퍼타입 서브타입이다. 상속관계 매핑: 객체의 상속과 데이터베이스의 슈퍼타입 서브타입을 매핑하는것이다. 슈퍼타입 서브타입 논리 모델을 물리 모델로 구현하는 방법을 알아보자. 각각 테이블로 변환 -> 조인 전략 부모 자식 모두 테이블로 만들고 부모 테이블의 기본 키를 받아 기본 키 + 외래 키로 사용하는 전략이다. 이때 무슨 테이블인지 구분하기 위해 DTYPE 같은 컬럼을 추가해야 한다. @Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "DTYPE") public abstract..
다대다 관계의 문제점 관계형 db는 다대다 관계를 테이블 2개로 표현하지 못한다. 연결 테이블을 추가해서 일대다 다대일 관계로 풀어내야 한다. 하지만 객체에서는 컬렉션을 이용해 객체 2개만으로 다대다 관계를 구현할 수 있다. 하지만 이 방법은 실무에서 사용하면 안된다. @ManyToMany 어노테이션으로 다대다 관계를 구현하면 테이블엔 자동으로 연결 테이블이 생성된다. 이 연결테이블은 매핑되지 않았기 때문에 우리가 원하는 컬럼을 매핑할 수 없다. 그리고 연결 테이블 때문에 쿼리가 자신이 생각하지 못한 쿼리가 나갈수 있다는 점도 있다. 다대다 관계 문제 해결 다대다 관계의 한계를 극복하는 점은 연결 테이블용 엔티티를 하나 더 많드는 것이다. 예를 들어 Member와 Product의 다대다 관계를 Membe..