일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 생성자주입
- 스프링 시큐리티 설정
- jpa lazy
- method refetence
- 비기능적 요구사항
- 도커 이미지 빌드
- IOC
- Atomicity
- 소프트웨어의 품격
- open-session-in-view
- java predicate
- 스프링 포매터
- 그래프큐엘
- ioc컨테이너
- 동적파라미터
- 토비의 스프링
- 기능적 요구사항
- kotlin 리팩터링
- spring formatter
- Spring
- fetch join
- 정적팩토리메서드
- 수정자주입
- 스프링부트 도커
- kotlin ::
- 스프링시큐리티
- 자바 필터
- 스프링di
- 스프링
- jpa no session
Archives
- Today
- Total
공부기록
MySQL5Dialect와 MySQL 스토리지 엔진 본문
반응형
org.hibernate.dialect.MySQL5Dialect
application-test.yml
spring:
jpa:
open-in-view: false
hibernate:
ddl-auto: create
database-platform: org.hibernate.dialect.MySQL5Dialect
상황 :
지금까지 작성한 테스트를 모두 한 번에 실행할 때Caused by: javax.persistence.NonUniqueResultException: query did not return a unique result: 2
같은 에러가 뜬다.
문제점 :
테스트 클래스 위에 @Transactinal
을 붙여서 테스트가 끝난 뒤 Rollback
되기를 기대했지만 되지 않아서 NonUniqueResultException
같은 에러가 났다. 확인해보니 org.hibernate.dialect.MySQL5Dialect
는 MySQLDialect
를 상속받는데, 이 클래스는 hibernate.dialect.storage_engine
환경 설정이 null
이라면 getDefaultMySQLStorageEngine()
으로 MySQLStorageEngine
필드에 값을 넣어준다. MySQL5Dialect
은 다음과 같다.
MySQL5Dialect.java
...
/**
* Constructs a MySQLDialect
*/
public MySQLDialect() {
super();
String storageEngine = Environment.getProperties().getProperty( Environment.STORAGE_ENGINE );
if ( storageEngine == null ) {
this.storageEngine = getDefaultMySQLStorageEngine();
}
...
protected MySQLStorageEngine getDefaultMySQLStorageEngine() {
return MyISAMStorageEngine.INSTANCE;
}
MyISAMStorageEngine
을 쓴다!!!!!!!!!
Table
들이 MyISAM
엔진으로 설정된 것을 볼 수 있다. MyISAM
은 Transaction
을 지원하지 않는다!
참고 : https://gracelove91.tistory.com/102
따라서 Rollback
이 되지 않기 때문에 NonUniqueResultException
같은 에러가 난 것이다.
해결 :
hibernate.dialect.storage_engine
를 설정해준다getDefaultMySQLStorageEngine()
이InnoDB
인dialect
를 쓴다.
나는 2번으로 해결했다.
application-test.yml
spring:
jpa:
open-in-view: false
hibernate:
ddl-auto: create
database-platform: org.hibernate.dialect.MySQL57Dialect
MySQL57Dialect
는MySQL55Dialect
를 상속받는다.
MySQL55Dialect
public class MySQL55Dialect extends MySQL5Dialect {
@Override
protected MySQLStorageEngine getDefaultMySQLStorageEngine() {
return InnoDBStorageEngine.INSTANCE;
}
}
InnoDBStorageEngine
이 기본 디폴트 스토리지 엔진임을 볼 수 있다.
반응형
'JPA' 카테고리의 다른 글
[JPA]open-session-in-view 를 알아보자 (1) | 2020.07.01 |
---|---|
@EntityGraph (0) | 2020.02.11 |
순수 JPA레포지토리의 페이징과 스프링 데이터 JPA레포지토리의 페이징. (0) | 2020.02.10 |
연관관계의 주인 (0) | 2020.01.27 |
준영속 상태 (0) | 2020.01.16 |