Skip to content

Commit 0b419cb

Browse files
committed
[BE/refactor] sofeDeleteConfig 오류 수정
HibernateFilterAspect 생성
1 parent 51e4288 commit 0b419cb

File tree

5 files changed

+61
-32
lines changed

5 files changed

+61
-32
lines changed

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ dependencies {
2828
// Spring Core
2929
implementation("org.springframework.boot:spring-boot-starter-web")
3030
implementation("org.springframework.boot:spring-boot-starter-validation")
31+
implementation("org.springframework.boot:spring-boot-starter-aop")
3132

3233
// JPA + MySQL
3334
implementation("org.springframework.boot:spring-boot-starter-data-jpa")

src/main/java/com/back/matchduo/MatchDuoApplication.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22

33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
5-
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
65

7-
@EnableJpaAuditing
86
@SpringBootApplication
97
public class MatchDuoApplication {
108

src/main/java/com/back/matchduo/domain/user/repository/UserRepository.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,5 @@
33
import com.back.matchduo.domain.user.entity.User;
44
import org.springframework.data.jpa.repository.JpaRepository;
55

6-
import java.util.Optional;
7-
86
public interface UserRepository extends JpaRepository<User,Integer> {
9-
Optional<User> findByEmail(String email);
107
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.back.matchduo.global.config;
2+
3+
import jakarta.persistence.EntityManager;
4+
import org.aspectj.lang.ProceedingJoinPoint;
5+
import org.hibernate.Session;
6+
import org.aspectj.lang.annotation.Around;
7+
import org.aspectj.lang.annotation.Aspect;
8+
import org.springframework.stereotype.Component;
9+
10+
@Aspect
11+
@Component
12+
public class HibernateFilterAspect {
13+
14+
private final EntityManager entityManager;
15+
16+
public HibernateFilterAspect(EntityManager entityManager) {
17+
this.entityManager = entityManager;
18+
}
19+
20+
// 서비스나 레포지토리 등 트랜잭션이 일어나는 곳을 감싸서 실행
21+
// 보통 Service 계층의 메소드 실행 시점에 적용합니다.
22+
@Around("execution(* com.back.matchduo..service..*(..))")
23+
public Object enableFilter(ProceedingJoinPoint joinPoint) throws Throwable {
24+
// 1. 현재 트랜잭션의 세션을 가져옴
25+
Session session = entityManager.unwrap(Session.class);
26+
27+
// 2. 필터 활성화
28+
session.enableFilter("softDeleteFilter");
29+
30+
// 3. 원래 메소드 실행
31+
return joinPoint.proceed();
32+
}
33+
}
Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
1-
package com.back.matchduo.global.config;
2-
3-
import jakarta.annotation.PostConstruct;
4-
import jakarta.persistence.EntityManager;
5-
import lombok.RequiredArgsConstructor;
6-
import org.hibernate.Session;
7-
import org.springframework.stereotype.Component;
8-
9-
/**
10-
* Soft Delete된 데이터(is_active = false)가
11-
* 기본 조회(JPQL, Repository)에서 자동으로 제외되도록 Hibernate Filter를 활성화하는 설정
12-
*/
13-
@Component
14-
@RequiredArgsConstructor
15-
public class SoftDeleteFilterConfig {
16-
17-
private final EntityManager entityManager;
18-
19-
@PostConstruct
20-
public void enableFilter() {
21-
// Hibernate Session 얻기
22-
Session session = entityManager.unwrap(Session.class);
23-
24-
// softDeleteFilter 활성화 (is_active = true 조건을 전역적으로 적용)
25-
session.enableFilter("softDeleteFilter");
26-
}
27-
}
1+
//package com.back.matchduo.global.config;
2+
//
3+
//import jakarta.annotation.PostConstruct;
4+
//import jakarta.persistence.EntityManager;
5+
//import lombok.RequiredArgsConstructor;
6+
//import org.hibernate.Session;
7+
//import org.springframework.stereotype.Component;
8+
//
9+
///**
10+
// * Soft Delete된 데이터(is_active = false)가
11+
// * 기본 조회(JPQL, Repository)에서 자동으로 제외되도록 Hibernate Filter를 활성화하는 설정
12+
// */
13+
//@Component
14+
//@RequiredArgsConstructor
15+
//public class SoftDeleteFilterConfig {
16+
//
17+
// private final EntityManager entityManager;
18+
//
19+
// @PostConstruct
20+
// public void enableFilter() {
21+
// // Hibernate Session 얻기
22+
// Session session = entityManager.unwrap(Session.class);
23+
//
24+
// // softDeleteFilter 활성화 (is_active = true 조건을 전역적으로 적용)
25+
// session.enableFilter("softDeleteFilter");
26+
// }
27+
//}

0 commit comments

Comments
 (0)