본문 바로가기

JAVA

(5)
읽기 전용 Query, Transaction 성능 최적화 영속성 컨텍스트는 엔티티 변경 감지를 위해 스냅샷 인스턴스를 메모리에 관리하므로 많은 메모리를 사용하게 됩니다. 한 트랜젝션 내에 엔티티 생성이나 수정이 없다면 읽기 전용으로 메모리를 최적화해 성능을 향상시킬 수 있습니다. 1. 스칼라 타입으로 조회 엔티티가 아닌 필드만 조회하면 영속성 컨텍스트는 조회 값을 관리하지 않습니다. 따라서 필드값 조회해서 DTO로 받는 방법을 사용할 수 있습니다. select o.id, o.name, o.price from orderItem o 2. 읽기 전용 쿼리 힌트 사용 하이버네이트 전용 힌트 org.hibernate.readOnly 를 사용하면 읽기 전용으로 조회할 수 있다. TypedQuery query = em.createQuery("select o from Ord..
상속 관계 Entity에서 자식 Entity 조회하기 with HibernateProxy @Entity @Inheritance(strategy=InheritanceType.JOINED) @Table(name="setting") @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter public class Setting { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="id") private Long id; ... } @Entity @Table(name = "item_setting") @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter public class ItemSetting extends Setting { @..
SpringBoot3.x 버전에서 QueryDsl 사용 설정 시 이슈 정리 1. 쿼리 결과 집합 transform, ResultTransformer and GroupBy 사용하기 QueryDsl 사용시 쿼리 결과를 다양한 타입으로 결과 집합, 그룹화하여 받을 수 있는 transform + GroupBy를 유용하게 사용했었습니다. SpringBoot 3.x 버전 이상의 환경에서는 2.x 버전과 다른 설정을 해주어야 사용이 가능합니다. JPAQueryFactory에 JPQLTemplates.DEFAULT 설정을 적용해 주어야만 사용이 가능합니다. @Configuration public class QuerydslConfig { @PersistenceContext private EntityManager entityManager; @Bean public JPAQueryFactory jp..
Scheduling 시 Exception 발생 처리 문제 1분마다 DB 조회해서 스케줄링으로 처리하는 로직이 있는데, 프로세스 중 Runtime Exception 이 발생하였습니다. 그런데 그 처리 로직 메소드에는 @Transactional 이 걸려있어서 예외 발생시에는 rollback 이 되고 있었는데요. 때문에 1분마다 도는 스케줄링에 계속해서 같은 예외에 걸려서 다른 프로세스로 넘어가지를 못하고 계속해서 에러를 내뿜고 있었습니다. org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only 스케줄러의 로직은 다음과 같습니다. @Component @RequiredArgsCo..
Querydsl MathExpressions 이용해 Float 컬럼값 select Querydsl 에서 DB 데이터 값을 변환하여 select 하는 방법 DB의 값중 Float 값을 제대로 선택하려면 decimal 로 변환해서 찾는 방법이 있고, SELECT * FROM your_table WHERE cast(my_float as decimal(5,1)) = 1.3; leehblue.com/match-a-float-in-mysql/ How To Match A Float Column In MySQL - Lee Blue The Float datatype in MySQL is inherently inaccurate. If you are planning to use a float datatype for a column in your database you should reconsider, e..