728x90
반응형
Hibernate의 @Immutable 사용
Hibernate를 사용한다면, 엔티티 클래스에 @Immutable 어노테이션을 추가할 수 있습니다.
@Immutable 어노테이션은 해당 엔티티가 수정되지 않는다는 것을 Hibernate에게 알려주며, 업데이트나 삭제 작업을 무시하거나 예외를 발생시킵니다.
import javax.persistence.Entity;
import org.hibernate.annotations.Immutable;
@Entity
@Immutable
public class MyEntity {
// 필드, getter 등
}
읽기 전용 트랜잭션 사용
서비스 계층에서 @Transactional(readOnly = true)를 사용하면, 해당 트랜잭션 내에서는 엔티티 변경 사항이 flush되지 않으므로 읽기 전용으로 동작하게 됩니다. 하지만 이 방식은 엔티티 객체 자체를 수정하는 것을 막지는 않으므로, 실수로 수정된 상태가 감지되더라도 flush되지 않게 할 뿐입니다.
@Service
public class MyService {
@Transactional(readOnly = true)
public List<MyEntity> getMyEntities() {
return myEntityRepository.findAll();
}
}
가장 확실한 방법은 Hibernate를 사용하는 경우 엔티티에 @Immutable 어노테이션을 추가하는 것입니다. 추가로 서비스 계층에서 @Transactional(readOnly = true)를 활용하면, 전체 애플리케이션에서 읽기 전용 환경을 유지하는 데 도움이 됩니다. 이를 통해 도메인 엔티티의 변경을 방지하고, 읽기 전용으로 사용할 수 있습니다.
728x90
반응형
'개발중 > Java Persistence API (JPA)' 카테고리의 다른 글
[JPA] 낙관적 락(Optimistic Lock)과 비관적락 (Pessimistic Lock) 이란 ? (1) | 2024.01.17 |
---|---|
JPA Bulk Insert 로 성능 향상 시키기 (0) | 2023.08.22 |
[JPA] Entity 가 Update 되는 과정에 대해서 아니 (0) | 2023.06.27 |
[JPA ERROR] No qualifying bean of type 'org.springframework.transaction.TransactionManager' available (0) | 2023.03.15 |
[JPA] 다른 컬럼명을 참조하는 연관관계에 대한 궁굼점 (referencedColumnName) (0) | 2023.02.13 |
댓글