JPA(5)
-
[JPA]@Transactional이란
1. 서론프로젝트를 진행하고 코드를 작성할 때 DB를 사용하게 된다면 Spring Data JPA를 사용하게 된다. 그리고 이때 해당 JPA는 Java에서의 ORM의 표준으로 사용이 되며, Spring 프레임워크에서는 Spring Data JPA로 하여 사용을 하게 된다. 해당 JPA를 사용하면서 같이 등장하는 것이 바로 @Transactional 이다.해당 어노테이션은 트랜잭션 관리를 간편, 용이하게 해주는 어노테이션이다. 이를 통해 해당 백엔드 서버와 데이터베이스 간의 작업이 하나의 단위로 실행하도록 보장하는 역할이다. 그렇기에 지금까지는 이러한 논리적 하나의 단위(원자성)을 위해 항상 해당 트랜잭션을 기입해주었다.하지만 이번에 기능을 구현한 후 성능 개선을 위해 리팩토링 및 학습을 하던 도중 무분별..
2024.09.24 -
[Spring] Category 구현하기
[Spring] Category 구현하기 쇼핑몰, 커뮤니티에 존재하는 주제를 표현할 때 자주 사용되는 것이 카테고리이다. 카테고리는 전형적인 계층형으로 서로 연관이 되는 구조이다. 해당 카테고리만을 단순히 구현해 보고 구현을 할 때 과정을 정리하려고 한다. 코드 먼저 코드들은 다음과 같다. 좀 더 구체화를 시키기 위해서는 인터페이스를 사용하고 DI를 사용하는 등의 과정을 거쳐야하는 것이 맞지만 현재의 경우 카테고리를 구현하는 것이 목표였기에 간단하게 컨트롤러, 엔티티, 서비스, 레포지토리 4개의 구성 요소만을 사용해서 진행을 하였다. 후에 다른 프로젝트를 진행할 때는 해당 부분에 대해 자세하게 세분화하고 DI를 지키는 식으로 진행을 할 예정이다. Controller package com.example.c..
2024.02.21 -
[JPA] 엔티티 매핑
[JPA] 엔티티 매핑 @Entity @Table 다양한 매핑 사용 데이터 베이스 스키마 자동 생성 DDL 생성 기능 기본 키 매핑 필드와 컬럼 매핑 : 레퍼런스 @Entity JPA를 사용하여 테이블을 표현할 자바 클래스는 @Entity 어노테이션을 필수로 붙여야 함 속성 기능 기본값 name - JPA에서 사용할 엔티티 이름 지정 - 기본값은 클래스 이름을 사용 - 프로젝트 내의 다른 패키지에 동일 이름을 가진 엔티티 클래스가 존재할 시 이름을 지정하여 충돌 방지 필수 설정하지 않을 경우 클래스 이름 그대로 사용 Entity클래스 사용 - interface로 구현 / default 값은 entity class 파일과 동일 @Documented @Target(TYPE) @Retention(RUNTIME..
2022.12.21 -
[JPA] 영속성 관리
[JPA] 영속성 관리 엔티티 매니저 펙토리 & 엔티티 매니저 영속성 컨텍스트 엔티티의 생명주기 영속성 컨텍스트의 특징 플러시 준영속 정리 엔티티 매니저 펙토리 & 엔티티 매니저 엔티티 매니저 (EntityManager) Make an instance managed and persistent. Params:entity – entity instance 엔티티 ( Entity )에 관한 모든 일 처리 저장 / 수정 / 삭제 / 조회... etc 엔티티를 저장하는 가상의 데이터 베이스 엔티티 매니저 팩토리 (EntityManager Factory) Create a new application-managed EntityManager. This method returns a new EntityManager ins..
2022.12.19 -
[JPA] Mysql table 생성오류
스프링을 사용해서 mysql 데이터베이스에 연결하여 테이블을 만드는 과정이었다. 기존에는 문제없이 잘 만들어지던 table이었는데 이번에는 반복적으로 오류가 존재하여 생성 불가하다는 문구가 반복돼서 나왔다. @Entity @Getter @Setter @NoArgsConstructor public class Item { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(nullable = false) private Long id; @Column(nullable = false) private String work; @Column private boolean check; @Builder public Item(Long id, String work,..
2022.06.16