Back-end
-
JPA - Query(쿼리)Back-end/JPA 2020. 6. 30. 16:59
Query JPA, Hibernate를 사용할 때는 항상 무슨 쿼리를 발생시키는지 그게 의도한 것인지 확인해야합니다. 이런 쿼리를 어떻게 적용시키는지 알아보는 시간을 가지겠습니다. JPQL (HQL) 데이터베이스 테이블이 아닌, 엔티티 객체 모델 기반으로 쿼리를 작성합니다. JPA 또는 하이버네이트가 해당 쿼리를 SQL로 변환해서 실행합니다. 참고자료 : 하이버네이트 공식문서 Post 클래스 title toString 추가 @Override public String toString() { return "Post{" + "title='" + title + '\'' + '}'; } title만 포함된 toString을 만듭니다. JpaRunner 클래스 @Override public void run(Appl..
-
JPA - FETCHBack-end/JPA 2020. 6. 30. 16:57
FETCH 연관 관계의 엔티티의 정보를 지금(Eager)혹은 나중에(Lazy) 가져올지 설정하는 기능입니다. @OneToMany : 기본값은 Lazy입니다. 매핑한 정보가 얼마나 많을지 모르기 때문입니다. @ManyToOne : 기본값은 Eager입니다. 매핑한 정보를 함께 가져옵니다. Eager Eager가 적용된 Entity 정보를 미리 다 가져와서 불필요한 조회를 더이상 하지 않습니다. Post 클래스 @OneToMany(mappedBy = "post", cascade = {CascadeType.PERSIST, CascadeType.REMOVE}, fetch = FetchType.EAGER) private Set comments = new HashSet(); 기존값은 Lazy지만 Fetch를 주어 ..
-
JPA - 엔티티 상태, CascadeBack-end/JPA 2020. 6. 30. 16:54
엔티티 상태 엔티티 상태에 따라서 데이터베이스에 반영되는 상태가 달라집니다. 상태의 종류와 그 상태를 전파하는 Cascade를 학습해보겠습니다. 엔티티 상태의 종류 Transient JPA가 모르는 상태입니다. 즉 관리하고 있는 대상이 아닙니다. new Object() 처럼 객체만 생성했을 때를 나타냅니다. Persistent JPA가 관리중인 상태입니다. Persistent 상태에서 관리하고 있던 객체가 데이터베이스에 넣는 시점에 데이터를 저장합니다. Transient상태에서 Session.save()를 통해 Persistent 상태로 넘어옵니다. Session.get(), Session.load(), Query.iterate() 등의 함수를 사용합니다. 1차 캐시 Persistent Context(E..
-
JPA - Relation Mapping(관계 매핑)Back-end/JPA 2020. 6. 30. 16:52
관계 매핑 관계 매핑에선 항상 두 엔티티가 존재해야합니다. 주종관계를 가지고 있으며 반대쪽 레퍼런스를 가진쪽이 주인 관계가 됩니다. 두 엔티티 클래스가 필요하기 때문에 기존 Account 클래스, 추가적으로 Study 클래스를 생성합니다. 여기서 Study는 Account가 Study를 다수로 생성할 수 있는 개념입니다. @Entity public class Study { @Id @GeneratedValue private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public vo..
-
JPA - Value Mapping(밸류 매핑)Back-end/JPA 2020. 6. 30. 16:49
밸류 매핑 Entity와는 다르게 다른 타입에 종속적인 타입을 매핑할 때 사용하는 방법입니다. 엔티티 클래스에 종속적인 밸류 클래스를 생성하여 엔티티 클래스가 생성, 삭제 될 때 동일하게 행동하게 됩니다. 여기서 실습하는 코드는 이전에 학습했던 프로젝트세팅과 엔티티매핑 포스팅에 설명되어 있어 참고하시면 됩니다. 밸류 타입 종류 기본 타입 (String, Date, Boolean, …) Composite Value 타입 Collection Value 타입 기본 타입의 콜렉션 컴포짓 타입의 콜렉션 이 중에서 Composite Value 타입에 대해 알아보겠습니다. Composite 밸류 타입 @Embadable : Composite Value 클래스에 지정하면 해당 클래스를 Composite Value로 만..
-
JPA - Entity Mapping(엔티티 매핑)Back-end/JPA 2020. 6. 30. 16:47
엔티티 매핑 엔티티를 매핑하는 방법에는 XML, 어노테이션 총 2가지의 방식이 있지만 보통 어노테이션 방식으로 사용하게 됩니다. 어노테이션을 활용하여 매핑하는 법에 대해 알아보겠습니다. 여기서 실습하는 코드는 이전에 학습했던 프로젝트세팅 포스팅에 설명되어 있습니다 @Entity 엔티티 클래스를 빈으로 등록하여 JPA와 연동할 수 있도록 해줍니다. 기본적으로 @Table을 포함하고 있습니다. @Entity(name = "users") 도메인 클래스명을 다른 클래스명으로 정의하고 테이블을 만들려고 할 때 name을 선언합니다. 도메인명은 User지만 users로 테이블이 생성된 모습입니다. @Id, @GeneratedValue @Id : 엔티티와 주키를 매핑할 때 사용합니다. 자바의 모든 primitive ..
-
JPA - 프로젝트 세팅방법Back-end/JPA 2020. 6. 30. 16:21
프로젝트 세팅 JPA를 활용하는 프로젝트를 만드는 방법을 알아봅시다. 개발 환경 IntelliJ Ultimate 2019.01.02 Mac OS Mojave Docker 2.0.0.3 PostgreSQL SpringBoot 2.1.5 Hibernate 5.3.10 데이터베이스 실행 Docker를 활용하여 postgreSQL을 연동합니다. 혹시 Docker를 활용하지 않으셨다면 postgreSQL를 참고해주시면 됩니다. JDBC 설정 spring.datasource.url=jdbc:postgresql://localhost:5432/springboot spring.datasource.username=junjang spring.datasource.password=pass Docker에서 설치 및 실행시 설정했..
-
JPA - ORMBack-end/JPA 2020. 6. 30. 16:17
ORM ORM(Object Relation Mapping)은 애플리케이션의 클래스와 SQL 데이터베이스의 테이블 사이의 맵핑 정보를 기술한 메타데이터를 사용하여 자바 애플리케이션의 객체를 SQL데이터베이스의 테이블에 자동으로 영속화 해주는 기술입니다. Hibernate나 JPA같은 ORM을 사용하는 이유는 도메인 모델을 사용하기 위해서 입니다. DB 연동 방식 JDBC를 직접 사용하는 방식 try(Connection connection = DriverManager.getConnection(url, username, password)){ System.out.println("Connection created: "+ connection); String sql = "CREATE TABLE ACCOUNT (..