no image
JPA - Lazy 성능 차이, OneToOne 양방향 Lazy
LAZY, EAGERA라는 엔티티에 아래와 외래키가 있다 해보자. Lazy를 지정하지 않으면 default인 EAGER가 적용된다.Eager 옵션에 JpaRepository에서 제공하는 기본 메소드( findById, findAll )로 A를 조회해 보면 4개의 JOIN 쿼리가 나간다. @OneToOne(cascade = {CascadeType.REMOVE, CascadeType.PERSIST}) @JoinColumn(name = "locate_id", referencedColumnName = "id") private Locate locate; @OneToOne(cascade = {CascadeType.REMOVE, CascadeType.PERSIST}) @JoinColumn(..
2024.11.26
no image
Spring Data JPA - flush(sql error 1062 sqlstate 23000)
예시)Vehicle 테이블idbigintPrimary key (Vehicle ID)license_platevarchar(255)Vehicle's license plate numberbrandvarchar(255)Manufacturer of the vehiclemodelvarchar(255)Vehicle modelyearintYear of manufacture Engine 테이블idbigintPrimary key (Engine ID)engine_numbervarchar(255)Engine serial numberengine_modelvarchar(255)Engine modelstatusenum('error', 'running', 'stopped')Current engine statusvehicle_idbi..
2024.10.20
no image
Spring Data JPA - Cascade, orphanRemoval 차이
관련 포스팅2023.07.13 - [Spring/JPA] - 스프링) JPA Entity option 지연 로딩/영속성 전이/고아 entity삭제 (23-07-12) 스프링) JPA Entity option 지연 로딩/영속성 전이/고아 entity삭제 (23-07-12)velog에서 이전한 글 입니다. 2023.07.13 - [spring] - 스프링) JPA Entity 연관관계 - 외래 키 주인 (23-07-11) 지난 포스팅에 이어 JPA Entity Option FetchType EAGER/LAZY (지연 로딩) public @interface ManyToOne{ ... FetchType fetccornpip.tistory.com지우고자 하는 데이터가 다른 테이블에서 FK로 사용 중이라면 지울 수..
2024.09.24
no image
JDBC, JPA, Hibernate, Spring Data JPA
JDBC (Java Database Connectivity) : DB에 접근할 수 있도록 자바에서 제공하는 API (인터페이스) JPA ( Java Persistence API ) : 자바 ORM 기술에 대한 표준 명세이다. (인터페이스) Hibernate : JPA의 구현체 중 하나 Spring Data JPA : JPA의 구현체를 한 층 더 추상화하여 비즈니스 로직에 더욱 집중한다. 다만 DB의 독립적 개발은 어려워진다. Repository 인터페이스를 사용 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'mysql:mysql-connector-java:8.0.28' spring-data-jpa..
2023.09.28
no image
spring data JPA - slice, page (무한 스크롤, 페이지네이션)
Spring Data JPA 페이징페이지를 구현한다면 두 가지 경우를 생각해 볼 수 있다. 스크롤이 끝에 다다르면 추가 요청으로 정보를 불러오는 무한 스크롤과 페이지 전환으로 다음 정보를 보여주는 페이지네이션이다. 둘 다 sql의 limit, offset을 잘 활용하면 구현할 수 있어 보인다. 하지만 spring data jpa에서 편리한 인터페이스를 제공한다. query method에 Pageable을 인자로 주면 return으로 Slice, Page, List 등의 타입을 받을 수 있다.public interface S3ImageRepository extends JpaRepository { // 단순 페이징 (repository에 작성 안해도 됨) Slice findAll(Pageable ..
2023.07.27
스프링) JPA Entity option 지연 로딩/영속성 전이/고아 entity삭제 (23-07-12)
velog에서 이전한 글 입니다. 2023.07.13 - [spring] - 스프링) JPA Entity 연관관계 - 외래 키 주인 (23-07-11) 지난 포스팅에 이어 JPA Entity Option FetchType EAGER/LAZY (지연 로딩) public @interface ManyToOne{ ... FetchType fetch() default FetchType.EAGER; ... } public @interface OneToMany{ ... FetchType fetch() default FetchType.LAZY; ... } EAGER는 첫 select와 동시에 join으로 참조 항목을 가져온다. LAZY는 첫 select에서 join을 하지않고 참조가 필요할 때 추가로 select를 요..
2023.07.14
스프링) JPA Entity 연관관계 - 외래 키 주인 (23-07-11)
velog에서 이전한 글 입니다. Entity 연관관계 공통 외래 키의 주인만이 외래 키를 등록,수정,삭제 할 수 있다. 외래 키의 주인은 테이블에 외래 키 컬럼이 생성되는 Entity를 말한다. 주인이 아닌 쪽은 오직 외래 키 읽기만 가능하다. 외래 키의 주인은 @JoinColumn(name = 컬럼명)를 사용하고 (양방향이라면) 반대편은 (mappedBy = 외래 키의 주인에서 '나'를 가르키는 필드명)을 사용한다. '나'를 가르키는 컬럼명이 아니라 필드명이다. JoinColumn의 컬럼명이 아니라 필드명이란 거 필드명 = 자바 객체 필드 컬럼명 = db 컬럼 단방향,양방향 하나를 예시로 보자 public class Food { @Id @GeneratedValue(strategy = Generatio..
2023.07.14
스프링) Spring Boot의 JPA @Transactional/SimpleJpaRepository (23-07-09)
velog에서 이전한 글 입니다. 2023.07.13 - [spring] - 스프링) JPA persistence/트랜잭션/Entity상태 (23-07-08)앞의 포스팅에서 jpa를 다루던 것은 hibernate-core이다.implementation 'org.hibernate:hibernate-core:6.1.7.Final'이번엔 spring boot에서 jpa를 어떻게 다루는지 살펴보자.Spring에서 JPAimplementation 'org.springframework.boot:spring-boot-starter-data-jpa'data-jpa 를 사용한다. 그냥 java에선 xml파일로 설정하고 EntityManager, EntityManagerFactory 를 직접 만들었지만 Springboot..
2023.07.14
스프링) JPA persistence/트랜잭션/Entity상태 (23-07-08)
velog에서 이전한 글 입니다. JPA Persistence Context 영속성 컨텍스트 : Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간이다. 객체의 생명(유지되는 시간)이나 공간(위치)을 유지하고 이동한다. 영속성 컨텍스트에 접근하고 조작하기 위해선 EntityManager가 필요하고 EntityManagerFactory를 통해 생성하여 사용할 수 있다. EntityManagerFactory는 일반적으로 DB 하나에 하나만 생성되어 애플리케이션이 동작하는 동안 사용된다. (Spring boot jpa를 사용하기 전에는 /resources/META-INF/ 위치에 persistence.xml 파일을 만들어 정보를 넣어둔다.) EntityManagerFactory emf = Pers..
2023.07.14