[자바 JPA 표준] 영속성 컨텍스 프로젝트 생성

sonnng·2023년 9월 16일
0

Spring

목록 보기
8/41
  • 데이터베이스 방언

    • JPA는 특정 데이터 베이스에 종속적이지 않다. 각 db마다 sql 문법 및 함수가 조금씩 다른데, 이러한 특정 db 만의 고유한 기능을 방언이라고 한다.
    • -dialect 라는 db를 persistance.xml에 등록해놓으면, h2 db를 사용한다고 지정해놓는 것.
  • JPA 구동 방식

      1. 설정정보 조회(persistance.xml 설정정보)
      1. Persistance 생성 후, EntityManagerFactory를 생성
      1. EntityManager를 필요할 때마다 생성해낸다.
    • jpa 의 모든 곳에서는 트랜잭션을 사용해야 한다.
  • Persistance.xml 하위 db 관련 설정정보 설정 정보를 읽어와서 EntityManager를 생성한다.

<persistence-unit name="hello">
    <properties>
        <!-- 필수 속성 -->
        <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
        <property name="javax.persistence.jdbc.user" value="sa"/>
        <property name="javax.persistence.jdbc.password" value=""/>
        <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>

        <!-- 옵션 -->
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.format_sql" value="true"/>
        <property name="hibernate.use_sql_comments" value="true"/>
        <!--<property name="hibernate.hbm2ddl.auto" value="create" />-->
   </persistence-unit>
</properties>
  • EntityManager는 여러 스레드에서 공유해서는 안된다.

  • JPA 변경은 모든 트랜잭션 안에서 실행해야 한다.

  • JPQL 소개(객체 지향 SQL)

    • JPA에서는 복잡한 조회를 할때 JPQL을 지원해준다.
    • 단순한 조회에서는 em.find() 로 간단하게 찾을 수 있지만 복잡한 경우 사용한다.
    • 검색할 때 테이블이 아닌, 엔티티 객체를 대상으로 검색할 수 있게 된다.
    • 필요 데이터만 db에서 불러오려면 검색 조건 포함된 SQL이 필요하다.
    • JPQL은 엔티티 객체 대상으로 쿼리를 보낸다는 것, SQL은 db 테이블 대상으로 쿼리를 보낸다는 것이 차이
    • 방언을 바꾸어도 JPQL을 바꿀 필요가 없다.

0개의 댓글