본문 바로가기

JPA10

영속성 처리하는 Method에 @transactional는 항상 붙이는게 맞을까? 문제 오늘 회사에서 특정 기능을 배포하자마자 문제가 발생했다. 핀포인트에서 발생하고 스택 트레이스는 다음과 같았다. > lazyinitializationexception could not initialize proxy Spring Boot, JPA 활용하는 개발자에게는 흔히 발생되는 예외중 하나이다. 이 예외가 발생하게된 이유는 무엇일까? 코드를 통해 이해해보자. @Entity public class Order { private long id; @OneToMany(mappedBy = "order", fetch = FetchType.LAZY) private List orderItems; } public interface OrderRepository extends JpaRepository { } @Servi.. 2024. 4. 20.
직접 코딩으로 느껴본 Spring Data JPA와 Spring Data JDBC 의 차이점 기존의 트랜잭션 스크립트 패턴으로 구현된 코드를 JPA로 변경해보면서 의존성을 분리하고, 다시한번 트랜잭션 스크립트 패턴으로 구현된 코드를 Spring Data JDBC (Spring JDBC와는 다른 Spring Data 에서 제공하는 라이브러리입니다.) 로 변경하면서 느꼈던 차이점에 대해서 작성할 예정입니다. Github - https://github.com/LenKIM/jwp-refactoring 트랜잭션 스크립트로 작성된 코드의 브랜치 - step1 JPA로 구현된 코드의 브랜치 - step3 Spring Data JDBC 로 구현된 코드의 브랜치 - try-spring-jdbc-step2-service Index Referance 에서 말하는 Spring Data JDBC와, JPA의 차이점 내.. 2021. 7. 18.
[JPA] JoinColumn vs mappedBy mappedBy 와 @JoinedColumn 에 대해서 알아보기. @Entity public class Company { ... private String name; @OneToMany(mappedBy = "company", orphanRemoval = true, fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List branchs = new ArrayList(); ... } @Entity public class Branch { ... private String branchName; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "companyId", foreignKey = @ForeignKey(.. 2021. 6. 13.
[우아한테크코스Pro]QnA 서비스(JPA)[2/9] 이번 2주차 미션은 JPA를 학습하는 한 주였습니다. 매번 느끼는 거지만, JPA 는 학습한다고해서 아는게 아닌것 같습니다. JPA는 진짜 백문이불여일타 의 대표적인 모범예제이지 않을까 싶습니다. 작업 내역 [1단계] 엔티티 맵핑하기 create table answer ( id bigint generated by default as identity, contents clob, created_at timestamp not null, deleted boolean not null, question_id bigint, updated_at timestamp, writer_id bigint, primary key (id) ) 위와 같은 SQL 을 그대로 엔티티 만들기 @Entity @Where(clause = "d.. 2021. 6. 6.
[JPA] Collection 을 업데이트 할때, add()와 addAll() 을 조심하자. JPA 에서 Collection 을 업데이트 할 때, 다음과 같은 에러를 받았다. o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 23505, SQLState: 23505 o.h.engine.jdbc.spi.SqlExceptionHelper : Unique index or primary key violation: "PUBLIC.UK_9NEY9DAVBULF79NMN9VG6K7TN_INDEX_2 ON PUBLIC.LINE(NAME) VALUES 2"; SQL statement: update line set created_date=?, modified_date=?, color=?, name=? where id=? [23505-200] 받았던 이유는 line enti.. 2021. 6. 5.
Spring Data JDBC 가볍게 살펴보기 - 1 Spring Data JPA 마찬가지로, Spring Data 라는 Prefix 가 붙습니다. 여기서 Spring Data 란 무엇일까? 간단하게 Docs 에서 말하는 컨셉을 이해해보자. Spring Data의 핵심은 Repository 이다. 이는 ID가 되는 Type과 Domain Class가 되는 Type을 Argument로 갖는다. 이 인터페이스는 주로 작업할 Type을 캡처하고 인터페이스를 확장하는 인터페이스를 발견하는 데 도움이 되는 마커 인터페이스 역할을 합니다. - docs.spring.io/spring-data/jdbc/docs/current/reference/html/#repositories.core-concepts 아마도 Spring Data 라고 하는 것들은 Repository 가 .. 2021. 5. 9.
JPA 연관 관계를 명시(사용)하는 이유는 무엇일까? 이 글을 작성하기 앞서, 절대 이 글은 JPA가 RDBS와의 패러다임 불일치를 해결하는 좋은 도구라는 것을 인지하고 있으며, 아래 글을 앞서 언급한 내용을 말하고자 작성한 것이 아니기 때문에 이 점 유의부탁드립니다. 아래 내용은 어디까지나 제 의견일 뿐이고, 맞지 않을 수도 있습니다. 스프링 부트를 활용하는 프로젝트에서 대부분 우리는 ORM으로 JPA를 사용합니다. 왜 그럴까요? 저같은 경우 인프런의 김영한님의 강의를 들으면서 JPA는 RDMS와 객체지향의 패러다임 불일치를 해결해주는 좋은 도구라는 것을 시작으로 JPA를 학습해왔습니다. 또한 개발 트랜드 라는 것이 한 몫했던건 아니였을까 싶기도 합니다. 아마도 앞서 말한 개발 트랜드는 아래와 같은 그래프를 말하는 거겠죠? 이런 행위가 혹시 귀찮다고 여기.. 2021. 1. 16.
[JPA] Field or Property access? 원본 - thorben-janssen.com/access-strategies-in-jpa-and-hibernate/ Access Strategies in JPA and Hibernate - Which is better, field or property access? - Thorben Janssen JPA and Hibernate support field-based and property-based access strategies. But what exactly is the difference and which one should you choose? thorben-janssen.com 들어가기 JPA를 활용해 연관관계를 맺을 때, 나도 간과했던 부분이 하나 있었습니다. Entity 의 attributes.. 2020. 12. 13.
Hibernate, JPA, Querydsl는 과연 좋은 도구일까? Photo by Annie Spratt on Unsplash 오늘도 여전히 사이드프로젝트를 진행하며 함께 하는 형님과의 대화에서 또다른 깨달음을 얻었습니다. 들어가기 최근 회사에서 시간이 남아, Querydsl 을 사내서비스에 적용하는 방안을 고려하기 위해서 학습하던 중, 나왔던 이야기입니다. Querydsl, SwaggerCodegen, ProtocalBuffer 등의 도구들은 이전에 가졌던 문제를 제 3의 관점으로 넘겨, 개발자는 비지니스 로직에만 집중 할 수 있게 해준다는 관점에서 좋은 도구라는 이야기를 남겼었습니다. 그러나, 이전에 지인과 식사를 하면서 가볍게 Querydsl과 Jpa 의 단점을 이야기 하면서 나눴던 부분에 대해서 내용을 남겨두면 좋겠다 싶어 이렇게 포스팅하게 되었습니다. 우리가 .. 2020. 10. 16.
LazyInitializationException 를 벗어나기 위해서는 어떻게 해야될까? JPA에서 최적의 쿼리를 보내는 방법은 무엇일까? Photo by Jan Antonin Kolar on Unsplash 들어가기 JPA의 연관관계를 사용하다 사용하지 않으니까, 금방 까먹고, 또다시 공부하는 제 모습을 보면서, 이 부분은 어느 정도 정리해야겠다는 마음으로 포스팅을 작성합니다. 이 글은 실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 학습한 뒤, 일부 내용을 편집했습니다. 리뷰 전체적으로 김영한 강사님의 노하우가 '녹아내려있다' 라는 생각은 강하게 들었습니다. 당연하다고 여겨지는 부분이라도 직접 동작하는 코드로 이해하지 않는다면, 이해하지 않은 것이라고 했습니다. 그런 측면에서 이번 강의는 당연하지만 실행해보지 않았기에 몰랐던 부분을 잘 집어주는 부분이 많았습니다. LazyInitializationException 는 왜.. 2020. 10. 3.