일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Connection Pool
- Service Locator 패턴
- Service Locator
- Effective Java
- @SpyBean
- springboot
- Web
- deleteById
- Firebase
- NotBlank
- 플라이웨이트
- Item04
- 디자인 패턴
- 트랜잭션
- @ControllerAdvice
- restTemplate
- JPA
- @Valid
- Spring Boot
- Effetive Java
- multi module
- java
- 데이터베이스
- db
- 이펙티브 자바
- @MockBean
- SQL 삽입 공격
- FCM
- NotEmpty
- Proxy Patter
- Today
- Total
목록JPA (5)
NoTimeForDawdling
Spring Data JPA에서 제공하는 쿼리 메서드 기능으로 3가지가 있다. 메서드 이름으로 쿼리 생성 JPA NamedQuery 사용 @Query 어노테이션 사용 이 중에 메서드 이름으로 쿼리를 생성하는 방법을 알아보자. 메서드 이름으로 쿼리 생성이란? 메서드 이름을 분석해서 JPQL 쿼리를 실행하는 것을 의미한다. 똑똑한 Spring Data JPA가 메서드 이름을 분석해서 JPQL을 유추해서 생성하고 실행한다. public interface UserRepository extends Repository { List findByEmailAddressAndLastname(String emailAddress, String lastname); } 위 코드는 다음과 같은 쿼리를 생성한다. select u f..
데이터베이스에 특정 데이터가 언제 생성되었고, 마지막 수정 날짜는 언제인지 기록하는 것은 꽤나 중요하다. 그렇기 때문에 해당 데이터는 도메인마다 공통으로 존재하게 되고, 코드의 중복이 발생하기 마련이다. 이런 문제를 해결하기 위해 JPA는 Audit라는 기능을 제공하고 있는데, 이는 JPA에서 시간에 대한 값을 자동으로 넣어주는 기능이다. BaseEntity 생성 Auditing이 필요한 Entity에서 사용할 BaseEntity는 다음과 같이 정의해 줬다. @Getter @EntityListeners(AuditingEntityListener.class) @MappedSuperclass public abstract class BaseEntity { @CreatedDate @Column(updatabl..
Spring Data Jpa를 사용해서 토이 프로젝트를 구성하던 중에 delete와 deleteById 중 뭘 사용하면 좋을지 고민해 보다가 둘의 차이점을 알아보기로 했다. 우선 delete와 deleteById는 CrudRepository 인터페이스 안에 다음과 같이 정의되어 있다. CrudRepository 인터페이스의 실제 구현체는 SimpleJpaRepository이다. SimpleJpaRepository에 구현되어있는 delete는 다음과 같다. delete는 입력받은 entity에 대해 null체크를 한 후 entity에 대한 삭제를 진행하고 있다. 자 이제 deleteById를 봐보자. 구현부를 보면 delete() 메서드를 호출하고 있는 모습을 볼 수 있다. findById()로 해당 en..
JpaRepository에서 delete() 메서드를 호출하여 삭제하려고 하는데 삭제가 안 되는 현상이 발생했다..! 코드는 에러없이 잘 돌아갔는데 자세히 보니 delete 쿼리가 실행되지 않았다! 소스 코드 Entity @Entity @Getter @NoArgsConstructor(access = PROTECTED) public class Product { ... @OneToMany(mappedBy = "product", cascade = CascadeType.ALL, orphanRemoval = true) private List interestProductList = new ArrayList(); ... } @Entity @Getter @NoArgsConstructor(access = PROTECTE..
특정 Entity의 필드 값으로 List를 들고 있었고, 해당 필드를 업데이트하려고 다음과 같은 에러가 발생했다! A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance 매핑 관계는 다음과 같다. @OneToMany(mappedBy = "product", fetch = EAGER, cascade = CascadeType.ALL, orphanRemoval = true) private List fileList = new ArrayList(); 그리고 문제의 업데이트 코드! private void changeFileList(List fileList) { this.fileList = fi..