본문 바로가기

JPA10

@Transactional 어노테이션 관련 인상깊게 정보 본 블로그 spring-data-jpa에서 제공하는 JpaRepository의 기본 구현체는 SimpleJpaRepository이고, class 위에 기본적으로 @Transactional(readOnly = true)로 설정되어 읽기 트랜잭션으로 설정되어 있다. 그런데 save, delete 동작 수행하는 메서드는 트랜잭션이 적용되어야 하므로 @Transactional 어노테이션이 붙어 있는 것을 확인할 수 있다. https://cupeanimus.tistory.com/102 @Transactional 옵션을 사용하지 않는다면? 일단 기본적으로 @Transactional 에서 많이 사용되는 readOnly 옵션의 default 는 false이다. 때문에 서비스레벨에서 해당 메서드의 Transaction 관리를 하려.. 2023. 8. 29.
스프링 REST API 생성 원칙 1. API를 만들 때는 Request로 전달 받는 인자의 파라메터로 Entity를 그대로 사용하지 않고, 해당 API에 필요한 정보만을 전달받는 전용 DTO 클래스를 만드는 것이 바람직하다. 그러면 API 스펙 변경에 유연하게 대처할 수 있고, 값들의 Validation 조건 거는 것에도 용이하다. 2. 응답 규격의 확장성을 위해서 Generic 클래스 활용 지연 로딩과 조회 성능 최적화 작년 8월에 동일한 내용 이미 정리 했었었음. 뒤늦게 확인함 https://charactermail.tistory.com/427 근본적으로 Entity를 직접 Response(외부 노출) 하는 경우는 지양해야 하는 방법이다 그럼에도 Entity를 노출하는 경우 주의사항을 보자면 1. 양방향 연관관계가 걸린 곳은 한 곳.. 2023. 6. 13.
JPA Entity에 index 거는 방법 @Table 어노테이션안에 아래처럼 @Index 부분 참조해서 작성하면 인덱스 자동으로 걸리게 됨 @Entity @Table(name = "\"comment\"", indexes ={ @Index(name = "post_id_idx", columnList = "post_id") }) @Getter @Setter //@SQLDelete(sql = "UPDATE \"comment\" SET deleted_at = NOW() where id=?") //@Where(clause = "delete_at is NULL") public class CommentEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @ManyToO.. 2022. 11. 26.
객체지향 쿼리 언어(JPQL) JPA는 다양한 쿼리 방법을 지원 JPQL JPA Criteria QueryDS 네이티브 SQL JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 JPA는 SQL을 추상화한 JPQL 이라는 객체 지향 쿼리 언어 제공 SQL과 문법 유사, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원 JPQL은 엔티티 객체를 대상으로 쿼리 SQL은 데이터베이스 테이블을 대상으로 쿼리 결국 JPQL을 짜면 SQL로 번역되어 실행되는 로직임. 2022. 9. 3.