자바 진영의 JPA와 TypeScript 진영의 TypeORM은 비슷한듯 다르다. 서비스 개발을 하면서 TypeORM을 사용했을 때는 TypeORM로 데이터를 조회할 때 자동으로 SoftDelete된 데이터는 제외해주는 기능이 있었는데, JPA에는 그런 기능이 없는 것이다.import jakarta.persistence.*;import org.hibernate.annotations.*;@Entity@SQLDelete(sql = "UPDATE my_table SET is_deleted = true WHERE id = ?")@Where(clause = "is_deleted = false")public class MyEntity { @Id @GeneratedValue(strategy = Genera..
JPA란 과거 자바 진행에서는 EJB 안에 엔티티 빈이라는 ORM 기술이 포함되어 있었으나, 너무 복잡하고 기술 성숙도도 떨어지고 J2EE 애플리케이션 서버에서만 동작하는 등의 어려움이 있었음. 이때 하이버네이트라는 오픈소스 ORM 프레임워크가 등장했는데 가볍고 실용적이고 기술 성숙도도 높았음. 결국 EJB 3.0에서 하이버네이트를 기반으로 새로운 자바 ORM 기술 표준이 만들어졌는데 이것이 JPA. JPA가 제공하는 CRUD API 저장 정확히 이야기하면 아래 코드는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다. jpa.persist(member); 조회 String memberId = "helloId"; jpa.find(Member.class, memberId); 수정 JPA는 ..
www.purin-it.com/spring-boot-oracle Spring BootでOracle接続処理を実装してみた|ITエンジニアとして経験・学習したこと Spring BootのWEBアプリケーションを開発する際、なんらかのデータベースにアクセスすることが多いが、Sprin www.purin-it.com 위 링크를 참고하여 Gradle 프로젝트를 JPA로 Oracler과 연결했다. 1. 사용할 테이블 만들고 확인용 더미 만들어주기 2. 프로젝트 - [lib]폴더에 ojdbc.jar 넣어주기 3. build.gradle에 아래의 코드 추가 dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' complie files('..
1. 직접 할당 : 기본 키를 애플리케이션에서 직접 할당 2. 자동 생성 : 대리 키 사용 방식 - IDENTITY : 기본 키 생성을 데이터베이스에 위임(MySQL). 먼저 엔티티를 DB에 저장한 후에 식별자를 조회해서 엔티티의 식별자에 할당. - SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본 키 할당(오라클). persist() 호출시 먼저 DB 시퀀스를 사용해서 식별자를 조회. 그리고 조회한 식별자를 엔티티에 할당 후 엔티티를 영속성 컨텍스트에 저장) -> IDENTITY나 SEQUENCE전략은 사용하는 데이터베이스에 의존 - TABLE : 키 생성 테이블을 사용 -> 모든 데이터베이스에서 사용 가능 키 생성 전략을 사용하려면 persistence.xml에 hibernate.id.new_g..
초기화 : 영속성 컨텍스트의 1차 캐시, 쓰기 지연 SQL저장소가 비워진다. 종료 : 영속성 컨텍스트의 1차 캐시, 쓰기 지연 SQL저장소도 사라진다. 영속성 컨텍스트가 초기화나 종료되면 엔티티는 준영속상태가 된다. 비영속 : 아직 영속성 컨텍스트나 데이터베이스와 전혀 관련이 없는 순수한 객체 상태 준영속 : (원래 관리했지만) 영속성 컨텍스트가 관리하지 않는 상태 준영속 상태로 만들려면 아래와 같은 세 가지 방법이 있다. // 1. 준영속 상태로 em.detach(); // 2. 영속성 컨텍스트 종료 em.close(); // 3. 영속성 컨텍스트 초기화 em.clear(); 준영속 상태의 특징 1. 비영속 상태와 유사하지만 영속상태를 거쳤기 때문에 반드시 식별자 값은 가지고 있다. 2. 지연로딩을 할..
지금까지 DB를 이용해서 한 프로젝트는 총 세 번이었다. 세 번의 프로젝트를 하면서 '객체지향이 그렇게 좋다고 노래를 부르면서 왜 객체지향적인 장점을 나는 느낄 수 없는걸까? 객체는 단순히 테이블의 데이터를 전달하는 것 아닌가?'하는 생각이 들었다. ('하나의 객체 안에 멤버변수로 또 다른 객체가 있다면 데이터베이스에서는 어떻게 처리를 해줘야 하나?' 등.) 세 번의 프로젝트 중 두 번은 직접 JDBC API를 사용했고, 한 번은 myBatis를 사용했다. 좀 더 객체지향적으로 애플리케이션을 설계해보고 싶은 욕심을 느꼈고, 마침 그때 를 보고 나와 같은 고민을 한 개발자들이 있고(역시...!) JPA라는 ORM 프레임워크를 알게 되었다. 그래서 JPA를 공부하기 전에 내가 왜 JPA를 배우려고 하는지, ..