일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- @IdClass
- REST란
- 빈생성안됨
- 스프링 부트 공식 문서
- json
- Filter
- REST API 규칙
- 스프링 부트 기능
- 복합키
- JPA주의사항
- github
- jpa에러
- Error creating bean with name
- 스프링부트오류
- JoinColumn
- uncheck Exception
- JPA
- jpa회원가입
- Spring Spring boot 차이
- jwt메서드
- Q 클래스
- 1차캐시
- Unsatisfied dependency
- 최종 프로젝트
- queryDSL
- ERD 작성
- 인텔리제이
- spring서버
- json gson 차이
- git
- Today
- Total
목록전체 글 (208)
Everyday Dev System
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/2EV5f/btspTJUJbvf/FC6igzDFJS60c6pNkTIdsk/img.png)
Exception에 대한 글 2023.08.04 - [나의 호기심] - Exception 뜯어보기 Exception 뜯어보기 Exception에 대해서 자세히 살펴보겠습니다. Exception 아래 사진을 보면 Throwable 클래스를 상속한 Exception 과 Error 클래스가 있습니다. 아래는 Exception 을 상속한 RuntimeException 입니다. 여기서 쓰인 주석 cdev.tistory.com checked, unchecked Exception - rollback 이슈 checked Exception은 기본적으로 rollback을 하지 않는다. 여러 DB 작업을 Transaction으로 묶지 않고 수행하는 상황에서 checked Exception이 발생하면, 수행한 데이터 관련된 ..
1. JPA 가 1차 캐시(영속성 컨텍스트) 를 통해 필요없는 쿼리는 날라가지 않도록 쿼리를 최적화함. 그런데, insert와 delete 쿼리문이 다 날라가는 경우가 있다. 이때 확인해야 할 사항은? 1) 해당 함수나 클래스안에 Transaction가 포함되고 있는지 확인 @Transactional 으로 함께 감싸져 있어야 최적화 수행. Transactional 없이 Repository 메소드 호출 형태일 경우라면 Repository 내부에서만 @Transactional이 최적화 Propagation (전파) 전략 체크해봐야 합니다. 2) 해당 Entity의 ID 식별자 생성 전략을 IDENTITY 로 설정했는지 확인 GenerationType.IDENTITY 로 키필드가 설정되어 있으면 DB에 실제로..
JPAQueryFactory을 빈으로 등록하기 위해 configuration 클래스를 생성한다. package me.chaeyoung.jpa.configuration; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class JPAConfiguration { @Persiste..
본 글은 다음 글을 참조하여 일부만 변경하여 작성하였으니, 아래 글을 먼저 확인 부탁드립니다. 아래 게시글을 참조하였고, 해당 글은 코드에 대한 자세한 설명만 추가한 글입니다. https://cherrypick.co.kr/querydsl-update-delete/ QueryDSL 수정, 삭제 배치 쿼리 JPQL 배치 쿼리와 같이 영속성 컨텍스트를 무시하고 데이터베이스를 직접 쿼리한다. QItem item = Qitem.item; JPAUpdateClause updateClause = new JPAUpdateClause(em, item); long count = updateClause.where(item.name.eq("체리픽")) cherrypick.co.kr QItem item = Qitem.item;..
JPA(Jakarta Persistence API)는 Java 프로그래밍 언어를 사용하여 관계형 데이터베이스를 다루기 위한 자바 ORM(Object-Relational Mapping) 기술입니다. JPA를 사용하는 이유와 그것이 어떻게 데이터 모델을 단순화하고 데이터 흐름을 정교하게 만드는 데 도움이 되는지 설명드리겠습니다. ORM의 편리함: JPA는 ORM의 한 종류로, 개발자가 데이터베이스와 객체 지향 프로그래밍 언어 간의 간격을 줄여줍니다. 즉, 개발자가 직접 SQL 쿼리를 작성하지 않고도 객체를 데이터베이스 테이블에 매핑하고 데이터를 읽고 쓸 수 있게 해줍니다. 이렇게 하면 데이터베이스와의 상호작용이 단순화되고, 개발자가 데이터베이스 세부 사항에 신경 쓰지 않고도 빠르고 효율적으로 개발할 수 있습..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/0mJZj/btspOAVOXCF/MlJ6rDRAk5PIZkSpsjrZ7K/img.png)
먼저, 선행되어야 하는 것들 입니다. 1. application에 @EnableJpaAuditing 추가 2. TimeStamp 클래스 생성 후 엔티티 클래스에서 상속 (Channel, Thread, Mention) 아래와 같이 TimeStamp 를 상속한 Channel 클래스의 createdAt, modifiedAt은 Auditing 을 통해 자동으로 들어가는 것을 알 수 있습니다. createdAt, modifiedAt 은 구현체 없이 동작하지만 createdBy, modifiedBy 는 구현체가 필요합니다. @Entity public class Channel extends TimeStamp { } package me.chaeyoung.jpa.common; import jakarta.persisten..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Peh8a/btspxqN96Rc/f9E0DiAH1S6ZTNIpbOrPbk/img.png)
Repository 인터페이스의 메소드 이름을 기반으로 쿼리를 생성하는 기능에 한계가 있는 경우, Q 클래스를 사용하여 더 복잡하고 유연한 쿼리를 작성할 수 있습니다. QueryDSL을 사용할 때, @Entity 어노테이션이 붙은 클래스에 대해 자동으로 Q 클래스가 생성됩니다. Q 클래스는 해당 엔티티 클래스와 동일한 패키지에 위치하며, 자동으로 생성됩니다. 따라서, QUser 클래스를 사용하기 위해서는 해당 클래스를 import하고, 인스턴스를 생성해야 합니다. 아래 예시에서 QThread 클래스는 me.chaeyoung.jpa.thread 패키지에 위치하고 있기 때문에, ThreadServiceImpl 클래스 내부에서는 QThread 클래스를 import하지 않고도 사용할 수 있습니다. 아래처럼 Th..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/wnYlC/btspNh3b1di/KAwsTOo13TKb3e7nHjz7JK/img.png)
chat GPT에도 물어보고 해당 경로로 가서 봤지만, 찾지 못했다. 결국 파일 디렉터리 하나하나 들어가서 찾아보았다. build 폴더도 아닌! out 폴더 내에 있었다. 여기서 궁금한 점이 생겼다. 위에 클래스는 MentionId 라는 클래스로, Mention 엔티티의 복합키를 설정하기 위한 파일이다. 임베디드 클래스는 JPA에서 다른 엔티티 클래스에 포함되는 복합 속성을 나타내는 클래스로, 데이터베이스에 별도의 테이블로 매핑되지 않고, 그를 포함하는 Mention 엔티티 클래스의 컬럼으로 매핑된다. 그런데, 왜 Q클래스가 생성이 되었을까? @Entity 어노테이션이 기재된 클래스만 생성되는 것이 아니였나? MentionId 클래스는 @Embeddable 어노테이션이 붙은 클래스이기 때문에 임베디드(e..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/otqv1/btspok8qpqt/Kmj4YKEvl6vKbJatbytEQK/img.png)
참조 : 내배캠 JPA 심화 강의 자료 https://teamsparta.notion.site/SpringData-QueryDSL-85b57e18a5204e70b6035a319d63f866 오류 시 해결 1. QChannel 이 활성화가 안될 경우 main 메서드가 있는 클래스를 다시 실행. 2. 테스트 코드시 Repository의 Bean 생성이 안될 경우에는 1) main 메서드가 있는 클래스에 아래 어노테이션 기재 여부 확인 @SpringBootApplication @EnableJpaRepositories 2) 그럼에도 안 될 경우에는 테스트 코드에 @SpringBootTest 어노테이션이 명시되어있는지 확인 3) 그래도 안된다면, Repository 클래스에 상속한 클래( JpaRepository..
Repository 에 기능 추가하기 delete() 메소드의 내부 기능 확인하기 delete 호출 시 영속성 상태인지 확인한다. 영속성 컨텍스트에 없다면(!em.contains(entity)) 엔티티를 조회해서 영속성 상태로 바꾼다. 왜 이렇게 해야 할까? Cascade, orphanRemoval에 의한 자식도 삭제가 누락되지 않도록 해야 한다. → 그렇지만, Cascade, orphanRemoval 상관없이 delete 쿼리를 바로 날려도 될 경우, (관계 매핑할 게 없고 영속성 전이를 할 필요가 없을 경우)에는 delete 를 오버라이딩하여 성능 향상을 할 수 있다.