분류 전체보기

리스너 모든 엔티티를 대상으로 언제 어떤 사용자가 삭제를 요청했는지 모두 로그로 남겨야 하는 요구사항이 있다고 가정하자. 이때 애플리케이션 삭제 로직을 하나 하나 찾아가며 로그를 남기는 것은 너무 비효율적이다. 이럴 때 JPA의 리스너 기능을 사용하면, 엔티티의 생명주기에 따른 이벤트를 처리할 수 있다. 이벤트의 종류 이벤트의 종류와 발생 시점은 다음과 같다. PostLoad : 엔티티가 영속성 컨텍스트에 조회된 직후, 또는 refresh를 호출한 후(2차 캐시에 저장되어 있어도 호출된다.) PrePersist : persist() 메소드를 호출해서 엔티티를 영속성 컨텍스트에 관리하기 직전에 호출된다. 식별자 생성 전략을 사용한 경우에는 엔티티의 식별자는 존재하지 않는 상태이다. 새로운 인스턴스를 mer..
@Converter 컨버터를 사용하면 엔티티의 데이터를 변환에서 데이터베이스에 저장할 수 있다. 예를 들어서 회원의 VIP여부를 자바의 boolean 타입을 사용하고 싶다고 하자. JPA를 사용하면 자바의 boolean 타입은 방언에 따라 다르겠지만, 데이터베이스에 저장될 때 0 또는 1로 저장된다. 그런데 데이터베이스에 숫자 대신 Y 또는 N으로 저장하고 싶으면 어떻게 해야할까? 그럴 때 사용할 수 있는 것이 바로 컨버터다. 사용 @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; ..
컬렉션 JPA에서는 자바에서 기본적으로 제공하는 Collection, List, Set, Map 컬렉션을 지원하고 다음 경우에 이 컬렉션을 사용할 수 있다. @OneToMany, @ManyToMany 를 사용해서 '일대다' 혹은 '다대다' 엔티티 관계를 매핑할 때. @ElementCollection을 사용해서 값 타입을 하나 이상 보관할 때 우선 자바 컬렉션 인터페이스의 특징을 간단히 살펴보고 가자. 자바 컬렉션 인터페이스의 특징 Collection : 자바가 제공하는 최상위 컬렉션이다. List : 순서가 있고, 중복을 허용한다. Set : 순서가 없고, 중복은 허용하지 않는다 Map : Key, Value로 되어있으며 키는 중복을 불허한다. JPA와 컬렉션 JPA 명세에는 자바 컬렉션 인터페이스에 대..
@OrderBy @OrderColumn이 데이터베이스에 순서용 컬럼을 매핑해서 관리했다면, @OrderBy는 데이터베이스의 ORDER BY 절을 사용해서 컬렉션을 정렬한다. 따라서 순서용 컬럼을 매핑할 필요도 없고, 또한 @OrderBy는 모든 컬렉션에 사용할 수 있다. 사용 방법을 알아보자. @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @OneToMany(mappedBy = "member") @OrderBy("id asc, completedDate desc") private ..
· 🐳 TIL
오늘 공부한 내용 [자바 ORM 표준 JPA 프로그래밍] - OSIV 공부하기 [이것이 취업을 위한 코딩 테스트다] - 구현의 시각 문제 풀기 지네릭 변성에 대해 혼자서 조금 공부해 보았다. [오브젝트] 6장 - 자기 전에 보고 잤다. 💭느낀 점 & 배운 점 강의에서는 30분 남짓한 시간으로 OSIV에 대해 간단하게 설명해 주셨다. 그러나 책에서는 그보다 훨씬 더 깊은 내용들이 존재하였다. 잘 기억도 나지 않지만, 강의에서 OSIV는 주로 어드민 페이지에서만 사용하는 방식을 선생님께서는 사용한다고 하셨었던 것 같다. 나는 이유도 기억이 안 나는 체로 그냥 무작정 그 희미한 기억 하나를 믿고 OSIV는 사용하지 않으려고 맨날 설정을 꺼뒀었다. 시간은 좀 오래 걸렸지만 충분히 의미 깊은 시간이었고, OSIV..
문제 정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하시오. 입력 조건 첫째 줄에 정수 N이 입력된다 (0
application.properties에 다음을 추가한다. (기본값 true) spring.jpa.open-in-view=false 📔 Reference 실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 - 인프런 | 강의 스프링 부트와 JPA를 활용해서 API를 개발합니다. 그리고 JPA 극한의 성능 최적화 방법을 학습할 수 있습니다., 스프링 부트, 실무에서 잘 쓰고 싶다면? 복잡한 문제까지 해결하는 힘을 길러보세요 www.inflearn.com
스프링에서 JPA를 사용하게 되면 스프링 컨테이너가 트랜잭션과 영속성 컨텍스트를 관리해주므로 애플리케이션을 손쉽게 개발할 수 있습니다. 당연하게도 이러한 JPA의 내부 동작원리를 모르고 사용한다면 여러 문제가 발생했을 때 해결하기 어렵습니다. 이번 글을 통해 JPA가 동작하는 내부 방식을 이해하고, 애플리케이션을 개발할 때 발생할 수 있는 다양한 문제점과 해결 방안을 알아보도록 하겠습니다. 트랜잭션 범위의 영속성 컨텍스트 스프링 컨테이너의 기본 전략은 '트랜잭션 범위의 영속성 컨텍스트' 입니다. 스프링에서 JPA를 사용하게 되면, 스프링 컨테이너가 제공하는 전략을 따라야 합니다. 스프링 컨테이너는 JPA의 영속성 컨텍스트를 지원할 때, 기본 전략으로 트랜잭션 범위의 영속성 컨텍스트를 사용합니다. 트랜잭션..
말 랑
'분류 전체보기' 카테고리의 글 목록 (160 Page)