본문 바로가기

Java

(16)
JPA 임베디드 타입 ( @Embeddable, @Embedded ) 임베디드 타입이란? 임베디드 타입이란 JPA 에서 엔티티에 사용하는 기본 값 타입을 모아 만든 복합적인 값 타입 입니다. 임베디드 타입을 통해 새로운 값 타입을 직접 정의 할 수 있습니다. 사용방법 @Embeddable: 값 타입을 정의하는 곳 @Embedded: 값 타입을 사용하는 곳 기본생성자 필수 (전 기본생성자를 등록하지 않았는데 정상적으로 작동되었습니다.) 임베디드 타입으로 만들 클래스를 만들고 @Embeddable 어노테이션을 적어줍니다. @Embeddable public class Address { private String city; private String street; private String zipcode; } 엔티티에 임베디드 타입을 필드에 추가하고 @Embedded 어노테이션을..
JPA 데이터베이스 스키마 자동 생성 JPA 를 사용하면 애플리케이션 실행 시점에 DDL 을 실행하여 데이터베이스를 정의 할 수 있다. 따라서 애플리케이션 실행 전 클래스를 통해 엔티티를 생성하거나 수정하게 되었을 때, 애플리케이션을 다시 실행하게 되면 테이블이 생성 또는 수정 되게 된다. 이를 통해 테이블 중심 개발에서 -> 객체 중심 개발을 할 수 있게 된다. 또한 데이터베이스 방언을 활용하여 H2, Oracle, Postgresql 등 데이터베이스에 적절한 DDL 을 생성할 수 있습니다. 적용하는 방법 스프링 application.yml spring: jpa: hibernate: ddl-auto: none 자바 persistance.xml 속성 옵션 설명 create 기존테이블 삭제 후 다시 생성 (DROP -> CREATE) crea..
JPA 객체와 테이블 매핑 @Entity @Entity 가 붙은 클래스는 엔티티라 부르며 JPA 가 관리 엔티티로 등록하게 되면 데이터 베이스에 테이블로 생성 - 기본 생성자 필수 - final 클래스, enum, interface, inner 클래스 사용이 제한 - 저장할 필드에 final 사용할 수 없음 속성 @Documented @Target(TYPE) @Retention(RUNTIME) public @interface Entity { String name() default ""; } name: - JPA 에서 사용할 엔티티 이름을 지정할 수 있음. - 기본값은 클래스 이름 (예: Member) - 같은 이름의 엔티티가 없으면 가급적 기본값을 사용 @Table @Table은 엔티티와 매핑할 테이블 지정 속성 @Target(T..
JPA Unknown entity 해결방법 에러원인 JPA 구현체인 하이버네이트 사용시 @Entity 를 선언해줬음에도 아래와 같이 에러가 발생하는 경우가 있습니다. java.lang.IllegalArgumentException: Unknown entity: package.class @Entity public class Member { @Id @GeneratedValue private Long id; private String name; // setter, getter ... } 이는 Gradle 로 실행하였을때 자주 발생하는 에러입니다. 해당 에러의 원인은 @Entity 어노테이션은 persistence.xml 의 파일 위치와 클래스파일 위치가 동등한 디렉토리에 위치하여야 동작하게 됩니다. 하지만 Gradle 로 빌드 시 아래와 같은 결과를 얻..
JPA 구현체 하이버네이트 사용방법 프로젝트 환경 및 라이브러리 세팅 - 자바 8 이상(권장) - H2 데이터베이스 - Maven - 하이버네이트 (JPA 구현체) 라이브러리 추가 - pom.xml org.hibernate hibernate-entitymanager 5.6.15.Final com.h2database h2 2.2.222 JPA 설정하기 resources 폴더 하위에 /META-INF/persistence.xml 생성 persistence.xml // 이부분은 나중에 EntityManageFactory 만들때 사용 데이터베이스 방언 JPA 는 특정 데이터베이스에 종속 되어 있지 않습니다. 따라서 각각의 데이터베이스가 제공하는 SQL 문법에 따라 SQL을 매핑합니다. ex) 가변문자의 경우 MySQL 은 VARCHAR 를 사용하..
JPA 란? JPA 는Java Persistence API 로 자바 진영에서 ORM (Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스 모음이다. ORM 이란? ORM은 "Object-Relational Mapping"의 약자로, 객체와 관계형 데이터베이스 간의 매핑을 의미합니다. 객체 지향 프로그래밍에서는 객체를 사용하여 데이터를 모델링하고, 관계형 데이터베이스는 테이블을 사용하여 데이터를 저장합니다. ORM은 이 두 세계 간의 불일치를 해결하기 위해 도움을 주는 기술입니다. JPA의 구현체로는 하이버네이트, EclipseLink, DataNucleus 가 있다. JPA 의 장점 1. SQL 중심적인 개발에서 벗어나 객체 중심적인 개발 2. 생산성 함수를 불러오는 것만으로 SQL 가..
[Spring] variable not initialized in the default constructor 에러 스프링이나 스프링부트 프로젝트를 진행하면서 Lombok 을 유용하게 사용하고 있습니다. 오늘도 어김없이 @RequiredArgsConstructor 를 사용하였습니다. 해당 어노테이션은 final 키워드가 붙은 필드를 생성자를 통해 주입시켜줍니다. 이때 Bean 으로 등록한 클래스가 하나이면 해당 클래스를 주입받을 수 있는데, 저는 WebClient 를 Bean 으로 등록해둔 상태로 @RequiredArgsConstructor 통해서 WebClient 를 주입받으려고 했는데 해당 에러가 발생하였습니다. @Configuration public class WebClientConfig { @Bean // Bean 으로 WebClient 등록 public WebClient webClient() { return ..
[Java] Reactive Streams 란? 1. reactive streams 란? reactive streams 는 non-bloacking, backPressure 를 사용하여 비동기식 스트림 처리에 대한 표준을 제공하기 위한 라이브러리 입니다. 참조 https://www.reactive-streams.org/ https://www.reactive-streams.org/ Reactive Streams Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure. This encompasses efforts aimed at runtime environments (JVM and JavaSc..