OrderServiceTest에서 Rollback(false) annotation을 붙였을 때 에러가 나는 이유
287
작성한 질문수 1
[질문 내용]
현재상황
OrderServiceTest에서 상품주문()을 테스트 중입니다.
테스트 중 에러가 나서 코드를 검토해보았는데,
@Rollback(false) Annotation이 있었습니다.
Rollback(false)자체가 테스트 결과에 직접적인 영향을 줄 수는 없다고 생각하여 무시했었습니다.
그러나 Rollback(false) 어노테이션을 지웠더니 테스트가 정상적으로 작동하였습니다.
궁금한 점
구글링도 해보고, 강의도 다시 들어보았지만
Rollback(false) 어노테이션이 상품주문 테스트 성공/실패에 어떠한 영향을 미치는지 궁금합니다.
답변 2
0
원인은 모르겠으나 해결하였습니다.
@OneToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name="delivery_id")
private Delivery delivery;OrderEntity에서 delivery를 선언할 때 cascade = CascadeType.ALL이 빠져있었습니다.
CascadeType.ALL은 Order 엔티티가 저장될 때, delivery 엔티티도 자동 저장되는 설정으로 알고 있습니다.
그러나 cascade = CascadeType.ALL가 없는 것이 어떻게
Rollback(False)가 있을 때는 실패를 하고,
Rollback(False)가 없을 때는 성공을 하는 차이를 만들어내는지는 잘 모르겠습니다.
0
안녕하세요. 이건화님, 공식 서포터즈 David입니다.
어떤 오류가 발생하였는지 오류와 관련된 정보를 추가로 제공해주실 수 있으실까요?
오류 메시지 전체를 올려주시면 답변에 큰 도움이 됩니다.
감사합니다.
0
Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
2024-03-17T13:41:17.481+09:00 INFO 8456 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2024-03-17T13:41:17.483+09:00 TRACE 8456 --- [ionShutdownHook] o.h.type.spi.TypeConfiguration$Scope : Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@531b1778] for TypeConfiguration
2024-03-17T13:41:17.483+09:00 DEBUG 8456 --- [ionShutdownHook] o.h.type.spi.TypeConfiguration$Scope : Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@698b1c68] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@531b1778]
2024-03-17T13:41:17.486+09:00 INFO 8456 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2024-03-17T13:41:17.496+09:00 INFO 8456 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
> Task :test
OrderServiceTest > ��ǰ�ֹ�() FAILED
org.springframework.dao.InvalidDataAccessApiUsageException at EntityManagerFactoryUtils.java:368
Caused by: java.lang.IllegalStateException at ExceptionConverterImpl.java:152
Caused by: org.hibernate.TransientPropertyValueException at CascadingActions.java:372
1 test completed, 1 failed
> Task :test FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':test'.
> There were failing tests. See the report at: file:///C:/Users/LG/Desktop/__/Workspace/ValuePoint/jpashop/jpashop/build/reports/tests/test/index.html
* Try:
> Run with --scan to get full insights.
Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
For more on this, please refer to https://docs.gradle.org/8.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
BUILD FAILED in 50s
5 actionable tasks: 2 executed, 3 up-to-date
글자수제한으로 인해 이만큼만 우선 올렸습니다.
혹시 부족하다면 추가로 더 올릴 수 있도록 하겠습니다.
0
org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : jpabook.jpashop.domain.Order.delivery -> jpabook.jpashop.domain.Delivery
Caused by: java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : jpabook.jpashop.domain.Order.delivery -> jpabook.jpashop.domain.Delivery
Caused by: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : jpabook.jpashop.domain.Order.delivery -> jpabook.jpashop.domain
org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : jpabook.jpashop.domain.Order.delivery -> jpabook.jpashop.domain.Delivery
Caused by: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : jpabook.jpashop.domain.Order.delivery -> jpabook.jpashop.domain.Delivery
0
안녕하세요. 건화님
코드 확인이 필요합니다.
실제 동작하는 전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.
주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요
추가로 다음 내용도 코멘트 부탁드립니다.
1. 문제 영역을 실행할 수 있는 방법
2. 문제가 어떻게 나타나는지에 대한 상세한 설명
링크: 공식 서포터즈
링크: 자주하는 질문
감사합니다.
0
https://drive.google.com/file/d/1kM9IvlapR9KVDt9tzk9GaiBoKuSAnr8w/view?usp=drive_link
1. 문제 영역을 실행할 수 있는 방법
test/java/jpabook.jpashop.Service의 OrderServiceTest에서 상품주문 test를 돌렸을 때의 문제입니다.
2. 문제가 어떻게 나타나는지에 대한 상세한 설명
Rollback(false)일 때는 Test가 실패하고,
Rollback(false)를 지우면 Test가 성공합니다.
이유가 궁금합니다.
1
안녕하세요. 이건화님
코드를 확인해보니 Order에서 Cascade 부분이 빠졌습니다.
다음 코드를 참고해서 추가해주세요.
public class Order {
//@OneToOne //변경 전
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) //변경 후
@JoinColumn(name = "delivery_id")
private Delivery delivery;추가로 다른 이슈이기는 한데, application.yml에서 ;MVCC=true 부분을 제거해주세요.
jdbc:h2:tcp://localhost/~/jpashop;MVCC=TRUE감사합니다.
sdk 설정 오류
0
53
2
오탈자 - @Transactional
0
56
1
src/test/resources 테스트 경로 문제
0
50
1
상품 등록후 H2 db 출력 순서 바꿀 수 있나요?
0
64
1
MemberRepositoryTest 실행오류
0
81
1
boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)
1
183
2
강의 마지막 QueryDSL 사용 부분 질문있습니다
1
142
2
클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.
0
51
1
도메인 모델 패턴 vs 트랜잭션 스크립트 패턴
0
71
1
기본 생성자
0
60
1
h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.
0
103
1
멤버서비스테스트 부분에서 막힙니다.
0
165
4
실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?
0
116
1
초반에 h2 다운로드 과정 꼭 필요한가요?
0
120
2
자신 필드에도 get으로 접근하는 이유가 있을까요?
0
114
1
24분 27초 연관관계 편의 메서드 위치
0
113
1
단건 주문만 가능하게 한건 의도한 부분이신가요?
0
109
2
빌드 툴, Gradle
0
59
1
h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다
0
77
2
Repository에서 EntityManager 주입 방식 차이
0
90
1
롬복과 사용자 정의 setter 메서드
0
73
1
주문 목록 조회 fetch join 질문드립니다
0
82
1
dirty checking 질문드립니다.
0
83
1
동시성 관련 질문입니다
0
75
1





