본문 바로가기

개인적으로 공부한 것을 정리해 놓은 블로그입니다 틀린 것이 있으면 댓글 부탁 드립니다!


반응형

전체 글

(160)
JPA 공부 14 - JPQL . 2 프로젝션 프로젝션 - select 절에 조회할 대상을 지정하는 것 - 프로젝션대상 : 엔티티 , 임베디드 타입 ,스칼라 타입(숫자 , 문자등 기본 데이터 타입) 엔티티 select m from Member m select m.team from Member m 임베디드 타입 select m.address from Memberm 스칼라 타입 select m.username, m.age from Member m 반환타입이 엔티티 컬랙션 타입인경우 컬렉션안에 엔티티들이 모두 영속성 컨택스트 안에서 관리된다 . Member member = new Member("user1" , 20); em.persist(member); em.flush(); em.clear(); List result = em.createQuery("sel..
JPA 공부 14 - JPQL . 1 JPQL 문법 - select m from Member as m where m.age > 18 - 클래스명은 자바문법대로 대문자로 해야한다. 필드명은 소문자로 사용한다. - JPQL 키워드는 대소문자 구문 하지 않는다. - 엔티티의 이름을 사용한다 . 테이블 이름이 아니다 . - 별칭은 필수다 (as 생략가능 ) - Ansi sql의 표준 집합과 정렬 함수들을 제공한다 . (COUNT() , SUM() , AVG() , MAX() , MIN) TypedQuery와 Query TypedQuery 타입은 반환 타입이 명확할 때 사용한다. TypedQuery query1 = em.createQuery("select m from Member m ", Member.class); - 리턴받는 타입이 명확하다 . 두..
JPA 공부 13 - 직접 쿼리를 작성하는 방법 JPA를 사용하면 엔티티 객체를 중심으로 개발하게 되는데 문제는 검색 쿼리이다 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색을 해야한다. 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하기 떄문에 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다 . 1.JPQL 이런 문제를 해결하기 위해 SQL 을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공한다 SQL 문법의 문법을 지원한다. JPQL은 데이터베이스 테이블을 대상으로 쿼리를 날리는 SQL 과는 달리 엔티티 객체를 대상으로 쿼리를 날리는 것이다. JPQL로 짜면 그게 SQL로 번역되서 쿼리가 날라간다. EntityManager에 createQuery( JPQL쿼리 , 검색하는 엔티티 ..
JPA 공부 12 - 값 타입 collection 사용 @NoArgsConstructor @AllArgsConstructor @Getter @Setter @Entity public class Member { @Id @GeneratedValue private Long id; private String name; //기간 @Embedded private Period period; //주소 @Embedded private Address homeAddress; @Embedded @AttributeOverrides(value = { @AttributeOverride(name = "zipcode",column = @Column(name = "work_zipcode")), @AttributeOverride(name = "street",column = @Column(nam..
JPA 공부 11 - JPA 데이터 타입 분류 (임베디드 타입) 엔티티 타입 - @Entity로 정의하는 객체 - 데이터가 변해도 식벼자로 지속해서 추적 가능 - 예)회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 - int , integer String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 - 식별자가 없고 값만 있으므로 변경시 추적 불가 - 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 된다. 1. 값 타입 - 자바 기본 타입(int ,double). - 래퍼 클래스 (Integer , Long) - String - 임베디드 타입(embedded type , 복합 값 타입) - 컬랙션 값 타입(collection value type) 임베디드 타입 - 새로운 값 타입을 직접 정의할 수 있다 . - JPA는 임베..
JPA 공부 10 - 영속성 전이 (cascade) cascade 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속상태로 만들고 싶을 떄 사용한다 . 예 : 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장하게 한다. @Entity @Getter @Setter @NoArgsConstructor @AllArgsConstructor public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent",cascade = CascadeType.ALL) private List childList = new ArrayList(); public void addChild(Child child){ childList.add(child)..
JPA 공부 9 - 즉시로딩과 지연로딩 지연 로딩 (Lazy loading) 연관된 내용을 프록시로 가져온다 . @Entity public class Member { @Id @GeneratedValue private Long id; private String name; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team_id") private Team team; } 연관된 필드의 연관관계 맵핑 옵션으로 fetch 타입을 지정할 수 있다. Lazy (지연로딩), Eagar(즉시로딩)이 있다. //팀 저장 Team team = new Team(); team.setName("team1"); em.persist(team); //멤버 저장 Member member = new Member(); me..
JPA 공부 8 - Proxy 일단 한가지 예시를 들어보려한다. Member 와 Team 엔티티가 있다 둘은 ManyToOne의 관계로 연관관계를 갖고있다. //Member를 가져옴 Member member = em.find(Member.class, 1L); //멤버만 필요한 경우 private static void printMember(Member member) { String name = member.getName(); System.out.println("memberName = " + name); } //멤버와 팀이 모두 필요한 경우 private static void printMemberAndTeam(Member member) { String name = member.getName(); System.out.println("mem..

반응형