개발하는 쿠키
article thumbnail
자바 ORM 표준 JPA 프로그래밍 | 04. 엔티티 매핑
Coding/computer science 2023. 9. 6. 01:31

- 객체와 테이블 매핑: @Entity, @Table - 기본 키 매핑: @Id - 필드와 컬럼 매핑: @Column - 연관관계 매핑: @ManyToOne, @JoinColumn @Entity JPA가 관리하는 클래스라는 의미이므로 필수로 붙여야 한다. 기본 생성자는 필수다. final class, enum class, interface, inner class 에는 사용할 수 없다. 지정할 필드에 final을 사용하면 안된다. @Table 엔티티와 매핑할 테이블을 지정한다. 다양한 매핑 사용 필드의 자료형마다 적절한 JPA어노테이션을 사용할 수 있다. @Entity @Table(name="MEMBER") pulblic class Member { @Id @Column(name = "ID") private..

article thumbnail
자바 ORM 표준 JPA 프로그래밍 | 03. 영속성 관리
Coding/computer science 2023. 8. 29. 23:56

엔티티 매니저: 엔티티를 저장, 수정, 삭제 조회하는 일을 처리한다. 엔티티를 저장하는 가상의 데이터베이스로 생각하면 된다. 엔티티 매니저 팩토리와 엔티티 매니저 데이터베이스를 1개만 사용하는 경우 EntityManagerFactory도 1개만 생성한다. // 공장 만들기, 비용이 많이 든다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); persistence.xml에 있는 정보를 바탕으로 DB Driver, user name, password, jdbc url을 설정해서 EntityManagerFactory를 만든다. 이후 필요할 때마다 엔티티 매니저를 생성한다. // 공장에서 엔티티 매니저 생성 비용이 거의 ..

article thumbnail
자바 ORM 표준 JPA 프로그래밍 | 02. JPA 시작
Coding/computer science 2023. 8. 22. 06:12

책과는 다르게 Intellij, Gradle 설정을 사용했습니다. Intellij 프로젝트 만들기 File > New > Project 를 통해 새로운 프로젝트를 만든다. Spring Initializr Generator를 클릭한 후 원하는 프로젝트 이름과 저장소를 정하고, Next를 누른다. Lombok, Spring Boot Dev Tools, Spring Data JPA Depentency를 선택 후 Create를 누른다. Intellij 에 H2 데이터베이스 연결 설정하기 Intellij 오른쪽 탭에서 Database > + > Data Source > H2 를 선택한다. H2데이터베이스 서버가 없으면 설치하라는 메시지가 나온다. Download를 클릭해서 설치하면 된다. build.gradle파..

article thumbnail
자바 ORM 표준 JPA 프로그래밍 | 01. JPA 소개
Coding/computer science 2023. 8. 21. 23:50

JPA 장점 CRUD SQL을 알아서 처리한다. 객체 모델링과 관계형 데이터베이스 사이의 차이점을 해결한다. 데이터베이스 종류를 쉽게 바꿀 수 있다. MySQL -> 오라클 SQL을 직접 다룰 때 발생하는 문제점 자바로 작성한 애플리케이션은 JDBC API를 사용해서 SQL을 DB로 전달한다. 반복, 반복 그리고 반복 객체를 데이터베이스에 CRUD 하기 위해서는 많은 SQL, JDBC API 가 필요하다. 각각의 테이블마다 이 작업을 반복해야 하는데, 그럴 때마다 비슷한 코드를 작성해야 한다. // 회원 객체 public class Member{ private String memberId; private String name; } // 회원용 DAO public class MemberDAO{ public..

article thumbnail
BUG | Mapstruct NullPointerException because "sym" is null
Coding/trouble shooting 2023. 7. 10. 14:43

문제를 발견하게 된 과정 Oracle Open JDK17에서 빌드할 땐 잘 되는데 Gitlab CLI로 DEV에 Build하면 오류가 발생했습니다. builds/[파일경로]/[파일명].java:11: error: Internal error in the mapping processor: java.lang.NullPointerException: Cannot invoke "com.sun.tools.javac.code.Symbol.getEnclosingElement()" because "sym" is null 문제 코드 import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.ReportingPolicy; @Mapper(com..

article thumbnail
JPA Proxy
Coding/computer science 2023. 6. 21. 15:00

JPA 프록시란? 프록시는 JPA에서 지연 로딩(Lazy Loading)을 구현하기 위해 사용되는 기술입니다. 지연 로딩(Lazy Loading)은 DB에서 연관된 엔티티를 필요한 시점에 가져오는 기능으로 즉시 로딩(Eager Loading)과 반대되는 개념입니다. JPA프록시는 실제 엔티티 대신 가짜 엔티티를 가져옵니다. 엔티티 A, B가 연관 관계에 있다고 가정할 때, A의 실제 엔티티를 조회하면서 B의 가짜 엔티티를 가져오는 것입니다. 그리고 B를 조회할 때, 진짜 엔티티를 가져옵니다. 따라서 B가 필요할 때까지는 조회 쿼리를 실행하지 않고, 프록시 객체를 반환하기 때문에 성능을 최적화할 수 있습니다. JPA 프록시 작동 원리 1. Order 클래스와 Customer 클래스가 다 : 1 의 연관관계..

article thumbnail
BUG | repository flush 할 때 연관관계는 매핑이 안되는 오류
Coding/trouble shooting 2023. 6. 20. 21:20

문제를 발견하게 된 과정 테이블 A, B 가 연관관계 매핑이 돼있고, B가 널인 상태일때, 서비스에서 A, B를 저장하고, flush를 한 후, A를 이용해서 B를 가져오면 널을 가져오게 됩니다. => 문제상황 하지만, 만약 B가 널이 아닌 상태에서 A를 이용해 B를 가져오면 널이 아닌 객체를 잘 가져옵니다. @Table @Entity @Getter @Builder public class A { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToOne(mappedBy ="A") private B b; } @Table @Entity @Getter @Builder public cl..

article thumbnail
Spring JDBC를 이용한 데이터 접근
Coding/computer science 2023. 6. 15. 15:43

스프링 Application에서 DBMS에 접근하는 방법 (간단한 버전) 1. 데이터베이스 드라이버 로드 Maven 또는 Gradle을 사용해서 JDBC 드라이버를 프로젝트에 추가합니다. 2. 데이터베이스 연결 설정 DB 연결정보를 XML, YAML, Properties 파일 또는 애노테이션을 통해 설정합니다. // properties 파일 spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=username spring.datasource.password=password 3. JDBC 템플릿 사용 DB 연결 설정 정보를 받아와서 내부적으로 DB와 연결을 설정합니다. 그리고 SQL문을 실행하고 결과를 ..

반응형