일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- 부트캠프
- Visual Basic
- 체인호출
- springboot
- 값 타입
- 연관관계
- Hibernate
- responsepart
- 커밋 컨벤션
- 테킷
- 반복문 탈출
- VB
- Java
- Git
- querydsl
- GitFlow
- 프로그래머스
- spring
- spring jpa
- 알고리즘
- 제작기
- 코딩테스트
- PDF병합
- break-label
- PDFBOX
- DOCS
- JPA
- orm
- 멋쟁이사자처럼
- 스프링부트 쇼핑몰 프로젝트
- Today
- Total
목록프로그래밍/JPA (14)
섭섭한 개발일지

지난 프로젝트에서 JPA에서 사용하는 Enum 값을 Converter를 통해 DB에 값을 텍스트가 아닌 숫자(컬럼 타입은 텍스트)로 저장하는 방식을 도입했었다. 이번 프로젝트에서 Entity 매핑과 enum converter화를 진행함에 있어EnumConverter를 작성하는 데에 불편함을 느꼈고 이를 조금 더 편하게 구성하는 방법이 없을까 생각을 했고 이를 위해 글을 찾아봤다. * 참고 게시글우아한기술블로그 (https://techblog.woowahan.com/2600/)기억을 기록으로 (https://velog.io/@rnqhstlr2297/JPA-Enum-Converter%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-Entity-Mapping) 기존 Converter 사용 ..
프로젝트에서 검색조건이 까다로운게 있었다. 상품을 검색할 때 선택한 카테고리 + 검색어를 통해 카테고리에 해당하면서 검색어를 포함한 상품을 반환하는 Query를 생성해야한다. 아래는 작성한 코드에서 생각대로 작동되지 않는 코드였다. List items = jpaQueryFactory .select(item) .from(item) .leftJoin(itemProduct).on(item.eq(itemProduct.item)) .leftJoin(product).on(itemProduct.product.eq(product)) .leftJoin(maker).on(product.maker.eq(maker)) .leftJoin(category).on(item.category.eq(category)) .where(ca..
프로젝트에서 데이터가 생성되면 create_at 필드에 생성 일자 데이터가 삽입된다. 프로젝트 로직에서 생성된 데이터의 스테이터스가 일정 시간이 지나도 변경되지 않으면 해당 데이터를 삭제하는 로직이 필요했다. SQL로 작성한 바는 아래와 같았다. SELECT id, time(created_at) FROM restaurant_order WHERE time (subdate(now(), INTERVAL 30 MINUTE)) >= time(created_at) AND status = 1 AND deleted_at IS NULL; 이걸 QueryDSL JPA 로 표현을 해야하기에 찾아보고 테스트 해본 결과 아래와 같이 작성을 하면 SQL과 동일하게 작동이 되었다. public List findOrderToDele..
public static String getEntityType(BaseEntity entityObj) { for (EntityTypeV2 entity : EntityTypeV2.values()) { if (entityObj.getClass().isInstance(entity.entityObj)) { return entity.entityType; } } throw new BusinessException(HttpResponse.Fail.NOT_FOUND); } enum에서 사용하는 메서드인데 class 타입을 비교해주는 메서드이다. 프로젝트에서 이미지를 s3에 저장하거나 db에서 불러올 때 entity의 타입이 필요로 하는데 편의성을 위해 BaseEntity를 통해서 처리를 하는 기능을 만들었었다. 이때까지..
프로젝트에서 데이터의 삭제를 물리적 삭제가 아닌 논리적 삭제로 처리를 하고 있다. 그렇기에 데이터를 조회할 때 해당 데이터의 삭제일자 값을 통해 삭제 여부를 확인하는데 1:N 관계의 entity에서 고민이 생겼다. 문의내역에는 답변이 존재하는데 이는 1:N 관계이고 엔티티는 아래와 같이 생겼다. public class Question extends BaseEntity { @Comment("문의사항 작성자") @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id", columnDefinition = "BIGINT", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)) private Member m..
JPA를 사용하면 Java 개발자는 SQL 쿼리 작성 및 데이터 액세스를 처리하는 작업을 쉽게 수행할 수 있습니다. 이를 위해 JPA는 개발자가 쉽게 CRUD 작성할 수 있도록 자동화된 기능을 제공하며 SQL을 작성하는 방법 중 하나로는 XML 파일을 사용할 수 있습니다. 이렇게 XML 파일을 사용하여 SQL 쿼리를 작성할 때, CDATA 섹션을 사용하면 쿼리 내에 있는 특수 문자를 처리할 수 있습니다. 그렇다면 CDATA가 무엇인지, 어떻게 사용하는지, 어디서 사용하는지 등을 자세히 알아보겠습니다. 1. CDATA란 무엇인가? CDATA는 Character Data의 약자로 XML 문서에서 일반적인 텍스트 데이터를 표시하는 방법 중 하나입니다. XML 문서에서는 일반적으로 태그를 사용하여 데이터를 표시..

Git 브런치 바로가기 CHAPTER 09 [ 값 타입 ] 과정 요약 JPA의 데이터 타입을 크게 분류하면 엔티티 타입과 값 타입으로 나눌 수 있다. 엔티티 타입은 @Entity로 정의하는 객체이고, 값 타입은 int, Integer, String와 같이 단순히 값으로 사용하는 자바의 기본 타입을 말한다. 엔티티 객체는 식별자를 통해 계속해서 추적이 가능하지만 값 타입은 그렇지 않다. 값 타입 기본값 타입 자바 기본 타입 int, long 래퍼 클래스 Integer, Long) String 임베디드 타입 복합 값 타입 : JPA에서 사용자가 직접 정의한 값 타입 컬렉션 값 타입 : 하나 이상의 값 타입 기본값 타입 @Entity public class Member { @Id @GeneratedValue ..

Git 브런치 바로가기 CHAPTER 08 [ 프록시와 연관관계 관리 ] 주요 과정 주제 내용 프록시와 즉시로딩, 지연로딩 객체는 객체그래프를 통해 데이터를 조회할 수 있다. 다만 실제 데이터는 데이터베이스에 저장되어 있으므로 테이블의 데이터를 조회해야 객체 그래프로 탐색이 가능하다. JPA는 이러한 문제를 프록시라는 기술을 사용하여 연관된 데이터를 실제 사용하는 시점에 데이터베이스에 조회할 수 있게 해두었는데 이 기능은 자주 사용하는 객체들에 대해서 조인을 통해 데이터를 미리 조회하는 것을 가능케 한다. 영속성 전이와 고아객체 연관된 객체를 함께 저장하거나 삭제할 수 있는 기능 프록시 엔티티를 조회할 때 연관관계의 엔티티들이 항상 사용되는 것이 아니다. 예로 회원 예제를 사용할 때 비즈니스 로직에 따라..