JPA

· JPA
1. 상황외부 API를 사용할 때마다 로그를 DB에 저장 -> 데이터가 너무 많이 쌓여서 데이터를 삭제하는 스케줄러 작성 ->데이터를 한번에 70만 건을 삭제하려고 하니깐 OutOfMemoryException이 발생! 2. 원인public interface ApiLogRepository extends JpaRepository, CustomApiLogRepository{ void deleteApiLogsByRegistrationDateLessThan(LocalDateTime localDateTime);} 위 메서드가 문제였다. 나는 쿼리를 DB에 직접 날려서 삭제하는 줄로 알았더니 위와 같이 작성하면 데이터를 모두 조회한 다음에 delete 쿼리를 일일이 날림! 즉 메모리에 대용량 데이터를 불러오니깐..
· JPA
예제 Entity [Querydsl] 환경설정 및 기본 문법 프로젝션과 결과 반환 - 기본 결과 반환의 타입이 여러개인 경우엔 Querydsl에서 제공해주는 Tuple 사용 // 프로젝션과 결과 반환 -기본 // Tuple은 외부로 노출 되는 것은 바람직하지 않음(querydsl에서 제공해주는 tuple이기 때문) @Test public void eimpleProjection(){ List result = queryFactory .select(member.username) .from(member) .fetch(); for (String s : result) { System.out.println("s = " + s); } } @Test public void tupleProjection(){ List res..
· JPA
환경설정연습용 프로젝트 준비 start.spring.io에서 Dependencies 추가spring.web lombokh2data jpabuild.gradle에 querydsl 추가 plugins { // queryDSL 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"}// spring boot 3.x 버전 이상 Querydsl 추가dependencies { implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl..
· JPA
사용자 정의 리포지토리 구현 필요한 기능을 따로 구현하는 경우에 사용한다. 실무에서는 주로 QueryDSL이나 SpringJdbcTemplate을 함께 사용할 때 사용함. 사용자 리포지토리가 항상 필요한 것은 아니다. 임의의 레포지토리를 만들어서 사용해도 됨. 방법 인터페이스에 작성 // interface 이름은 사용자가 임의로 지어도 무방 public interface MemberRepositoryCustom { List findMemberCustom(); } 작성한 인터페이스를 구현하는 class 작성 class는 이름 짓는 규칙이 정해져 있음. @RequiredArgsConstructor public class MemberRepositoryImpl implements MemberRepositoryC..
· JPA
벌크성 수정 쿼리 쿼리 // MemberRepository, / 벌크 쿼리 @Modifying // 이게 있어야 업데이트 쿼리를 날려줌. @Query("update Member m set m.age = m.age + 1 where m.age >=:age") int bulkAgePlus(@Param("age")int age); Test 코드 벌크 쿼리는 영속성 컨텍스트에 들리지 않고 DB에 바로 쿼리를 날림. 영속성 컨텍스트는 영향을 받지 않음. 그래서 아래와 같이 사용X, 벌크 쿼리 사용 후에는 영속성 컨텍스트를 날려주어야함. @Test public void paging(){ Member m1 = new Member("AAA1",20); Member m2 = new Member("AAA2",30); Me..
· JPA
사용법 실습용 Member Entity // Member Entity package study.demo.Entity; import jakarta.persistence.*; import lombok.*; @Entity @Setter @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @ToString(of = {"id","username","age"}) public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String username; private int age; @ManyToOne @JoinColumn(name = "team_id") ..
나는시화
'JPA' 카테고리의 글 목록