BackEnd/JPA50 [JPA] Hibernate6 SQLFunctionTemplate not working anymore 1. 문제의 상황 이번에 SpringBoot 3로 migration 하면서 Hibernate도 6으로 변경하게 되었다. 하지만 더 이상 SQLFunctionTemplate을 사용할 수 없다는 점을 알게 되었다... 나의 프로젝트에는 많지는 않지만, 소량의 CustomFuction들이 존재하고 있던 상황이다... 다음은 기존 Hibernate5에서 커스텀하여 사용하고 있던 "match"라는 이름의 함수이다. 의존성 자체를 찾을 수 없는 상황이였으며, Hibernate의 SQLFunctionTemplate 자체가 deprecated 되었다는 점 을 알게 되었다. 따라서 이를 변경하기 위해 엄청난 삽질을 했는데.... 나처럼 삽질하지 않도록 하기 위해.... 기록을 남겨본다. 2. 해결 방법 1) 다음과 같이.. BackEnd/JPA 2024. 3. 17. [JPA] Unable to find column with logical name: child_name in org.hibernate.mapping.Table and its related supertables and secondary tables 1. 문제의 상황 RoleHierarchy라는 Entity에서 필드로 String childName을 가지고 있다. 또한 내가 알기로는 Spring이 알아서 저장할 때 camel case로 변환하여 저장해 주는 것으로 알고 있다. 하지만 다음과 같이 childName이라는 column을 찾을 수 없다는 오류에 직면하게 되었다. 이러한 문제가 발생한 이유는 바로 부모를 참조할 때 referencedColumnName으로 "child_name"을 지정해 줬기 때문이다. 원래는 referencedColumnName을 지정하지 않고, default로 설정하는 부모의 id값을 기본으로 사용하겠지만, 나의 코드에서는 Role의 이름이면 충분히 구별할 수 있었기 때문에 id를 저장할 필요가 없었다. (id가 1인 R.. BackEnd/JPA 2023. 2. 16. [JPA] QueryDsl에서 Groupy By적용 후 가장 큰 원소 가져오기 우선 이번 글은 제가 쿼리를 잘 못짠 부분도 있기 때문에, 다른 방식도 있을 수 있습니다. 다만 구글에 검색시 별다른 방법이 보이지 않아 글을 작성해 봅니다. 1. 문제가 된 상황 프로젝트를 진행하다 보니 다음과 같은 상황이 있었습니다. User와 Post는 중간테이블인 Scrap을 두고 N:M 관계를 형성하고 있습니다. Post와 PostPhoto는 1: N의 관계로, 하나의 Post당 여러 PostPhoto가 있는 상황이였습니다. 자 여기서 의문점! 1) 사용자가 다음과 같이 원하는 피드에서 저장하기(스크랩) 버튼을 누른다. 2) scrap 엔티티로 저장된다. 3) 이후 다음과 같이 프로필 페이지에서 "관심목록"을 누를경우, 스크랩된 하나의 피드당 하나의 대표 사진만 보여줘야 한다. 이를 어떻게 Qu.. BackEnd/JPA 2022. 11. 23. [JPA] QueryDSL 에서 Select필드로 상속한 Entity 사용시 경험한 문제 프로젝트를 진행하다 보니, ID값을 공통적인 BaseEntity에 들고 있어서 발생하는 문제가 있었습니다. 2가지 문제였는데 1) no property found for class with parameters 2) com.querydsl.core.types.QBean com.example.queyrdsl.entity.BarMoodTag with modifiers "protected" 이를 해결해보자! 1. 문제 상황 우선 PostId를 하나 받으면, 해당 포스트에 연관된 모든 MoodTag를 가져오는 것 이 목표인 상황입니다! ▶ BaseEntity @MappedSuperclass @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public abs.. BackEnd/JPA 2022. 11. 10. [JPA] Soft Delete 자동 처리하기 이번 프로젝트를 진행하면서 1급 컬랙션을 통한 Soft Delete를 처리하면서 기록을 남겨본다! 1. Soft Delete 란? 우선 데이터를 삭제하는 방식에는 hard delete, soft delete 2가지 있습니다. hard delete는 delete 쿼리를 날려서 데이터베이스에서 실제로 삭제하는 방식이고, soft delete는 실제로 데이터베이스에서 데이터를 삭제하는 것이 아니라, 테이블에 deleted와 같은 필드를 추가해주고, update 쿼리를 통해서 deleted 값을 변경해주는 방식입니다. soft delete를 한 경우, 조회시 sofe delete 처리된 값이 함께 반환되면 안되기 때문에 "where deleted = false"같은 조건을 추가하여 sofe delete되지 않은.. BackEnd/JPA 2022. 11. 9. [JPA] Open Session In View 더 깊게 사실 예전에 이미 OSIV에 대한 글을 작성한 적이 있다. https://blogshine.tistory.com/379 HTML 삽입 미리보기할 수 없" data-og-host="blogshine.tistory.com" data-og-source-url="https://blogshine.tistory.com/379" data-og-url="https://blogshine.tistory.com/379" data-og-image="https://scrap.kakaocdn.net/dn/lMCFs/hyPLg4W1Gs/Muf3gnc1ikTWyz5K0u0qDk/img.png?width=622&height=526&face=0_0_622_526,https://scrap.kakaocdn.net/dn/gux9D/hyPJW.. BackEnd/JPA 2022. 9. 11. [JPA] Lazy 로딩으로 인한 JSON 반환 오류 (No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer) 1. 문제의 상황 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 Issue 와 Comment 는 1:N의 관계이다. 따라서 Comment의 코드를 보면 다음과 같이 Lazy 로딩이 걸려있다. ▶ Comment @Getter @Entity @EqualsAndHashCode(of = "id") @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Comment extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "comment_id") private Long id; @ManyToOne(fetch .. BackEnd/JPA 2022. 9. 7. [JPA] JPA metamodel must not be empty! 1. 문제 상황 테스트코드를 작성하던 도중, Controller계층에 @WebMvcTest Slice Test를 하나 추가했더니, JPA metamodel must not be empty! 에러가 발생했다. TestDouble에 필요한 부분들은 전부 Stub을 만들어 줬다고 생각되는데, 어디서 에러가 발생하는지 찾기 어려웠다. 알고보니 객체를 생성하고, 영속화 할때 자동으로 생성시각이 기록되도록 Auditing 기능을 사용하고 있었는데, 이게 문제였다. 2. 원인 우선 나의 메인 메서드라 할 수 있는 IssueTrackerApplicaion.java는 다음과 같다. @EnableJpaAuditing @SpringBootApplication public class IssueTrackerApplication.. BackEnd/JPA 2022. 7. 28. [JPA] 일급 컬렉션 1. 일급 컬렉션? 일급 컬렉션은 Collection객체를 감싸면서 다른 필드가 없는 클래스를 의미합니다. 특정 클래스에 List나 Set 같은 Collection 필드로 가지고 있을 때, 이들을 하나의 클래스로 만들어서 사용할 수 있습니다! 일급 컬렉션이라는 단어는 소트웍스 엔소롤지의 객체지향 생활체조 파트에서 언급이 되었습니다. 규칙 8: 일급 콜렉션 사용 이 규칙의 적용은 간단하다. 컬렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다. 각 콜렉션은 그 자체로 포장돼 있으므로 이제 컬렉션과 관련된 동작은 근거지가 마련된 셈이다. 필터가 이 새 클래스의 일부가 됨을 알 수 있다. 필터는 또한 스스로 함수 객체가 될 수 있다. 또한 새 클래스는 두 그룹을 같이 묶는다든가 그룹의 각 원소에 규칙.. BackEnd/JPA 2022. 7. 17. [JPA] SpringBoot 2.5 이후부터 data.sql 초기화 시점 이번 프로젝트를 진행하던 도중 data.sql 을 통한 초기화 데이터 삽입이 정상적으로 되지 않는 문제가 있었습니다. 이를 해결하기 위한 설정이 필요했는데, 왜 이런 문제가 발생했는지 알아보시죠! 소제목 입력 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우선 SpringBoot 2.4 이하의 버전에서는 data.sql이 정상적으로 초기화 된다고 합니다. Spring Boot 버전 2.4 -> 2.5 업데이트 사항중에 일부분 때문에 우리는 따로 추가설정을 해줘야 합니다. 원래 설정은 다음과 같았습니다. spring: jpa: hibernate: ddl-auto: create properties: hibernate: format_sql: true database: mysq.. BackEnd/JPA 2022. 6. 6. [JPA] JSON 직렬화 순환 참조 해결하기 오늘도 프로젝트를 구현하던 도중에 거의 매번 만나왔던 순환 참조 문제를 만나게 되었다. 이번이 처음은 아니지만, 한번쯤 정리해볼만한 내용인것 같아 정리해둔다. 1. JSON에서 순환 참조 문제 ▶ 순환 참조 JPA에서 양방향으로 연결된 엔티티를 JSON 형태로 직렬화하는 과정에서, 서로의 정보를 계속 순환하며 참조하여StackOverflowError 를 발생시키는 현상이다. Spring Boot에서는 @ResponseBody를 구현할 시 Object를 JSON 형태로 변환하기 위해 Jackson 라이브러리를 이용하는데, 이때 Jackson은 entity의 getter를 호출하여 필드에 접근하고, 직렬화를 이용해 Object를 JSON 형태로 객체를 변화시켜 반환한다. 문제는 getter를 호출하는 과정에.. BackEnd/JPA 2022. 6. 5. [JPA] Spring Data JPA가 제공하는 QueryDsl 기능 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 1. 인터페이스 지원 - QuerydslPredicateExecutor " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 여기서 소개하는 기능은 제약이 커서 복잡한 실무 환경에서 사용하기에는 많이 부족하다. 그래도 Spring Data 에서 제공하는 기능이므로 간단히 소개하고, 왜 부족한지 설명하겠다. 1-1) Interface 지원 - QuerydslPredicateExecutor 기존의 repository에 다음과 같이 QuerydslPredicateExecutor를 추가로 상속하게 되었다. public interface MemberRepository.. BackEnd/JPA 2022. 5. 16. 이전 1 2 3 4 5 다음