Framework & Library/Spring 5

[Spring Data JPA] jpa.generate-ddl과 jpa.hibernate.ddl-auto 프로퍼티

참고 https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/html/howto-database-initialization.html https://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/ch03.html JPA를 사용한 데이터베이스 초기화 JPA에는 DDL 생성 기능이 있으며, 어플리케이션 시작 시 실행되도록 설정할 수 있다. 이를 다루는 두 가지 속성이 spring.jpa.generate-ddl과 spring.jpa.hibernate.ddl-auto 이다. HBM2DDL_AUTO 프로퍼티 위 두 프로퍼티는 Hibernate의 HBM2DDL_AUTO 프로퍼티 값을 결정한다. 그렇다면 이 HBM2..

[Spring Boot] @SpringBootTest를 사용한 테스트의 격리

이전 방식: @DirtiesContext를 통한 격리 https://github.com/wootecam-gugucon/shopping-mall 프로젝트에서 @SpringBootTest로 통합 테스트를 진행할 때 @DirtiesContext를 사용해 테스트 간 격리를 시켰다. @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class IntegrationTest { // 기타 설정 } https://docs.spring.io/spring-framework/referenc..

[Spring Boot/JPA] org.hibernate.LazyInitializationException: could not initialize proxy - no Session

https://sechoi.tistory.com/15 [Spring Boot/JPA] FetchType, Lazy Loading 데이터베이스의 두 테이블이 (일대다 혹은 다대일) 연관 관계를 맺을 때 FK를 통해 연결된다. FK는 연결 된 테이블의 PK이다. 하지만 JPA를 사용하면 코드에서 PK가 아닌 PK가 나타내는 테이블 자체 sechoi.tistory.com tmi. 위 포스팅을 한 이유는 사실 이 포스팅을 위해서였다 🙃 문제 상황 @Service public class Service { public List showAllCommentsFromBoard(Long boardId) { return freeBoardCommentCustomRepository.findAllByBoard(boardId) ...

[Spring Boot/JPA] FetchType, Lazy Loading

데이터베이스의 두 테이블이 (일대다 혹은 다대일) 연관 관계를 맺을 때 FK를 통해 연결된다. FK는 연결 된 테이블의 PK이다. 하지만 JPA를 사용하면 코드에서 PK가 아닌 PK가 나타내는 테이블 자체로 연결한다. 원래는 코드에서 다음과 같이 연관관계를 나타낸다면, public class Member { // 나머지 컬럼 생략 Long teamId; } public class Team { Long id; } JPA는 해당 객체 자체로 연관관계를 나타낸다. public class Member { @ManyToOne @JoinColumn(name = "team_id") Team team; } 그렇다고 해서 데이터베이스의 테이블이 변하지는 않는다. 실제 member 테이블에는 똑같이 team_id 라는 F..

[SpringBoot/JPA] org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "테이블 이름" not found (this database is empty)

문제 상황 - 연결 된 데이터베이스에 해당 테이블이 존재하는 것을 확인함 - 하지만 스프링부트 실행 시 제목과 같이 해당 테이블이 데이터베이스에 존재하지 않는다는 에러를 띄웠다 해결 과정 구글링 결과 application.yaml에서 spring.jpa.defer-datasource-initialization을 true로 설정한다 (스프링부트 2.5 버전 업데이트 문제) 테이블의 이름이 예약어(ex. user)이거나 대소문자가 다른지 확인한다 두 가지 해결 방법을 찾았지만 소용이 없었다. 이미 1, 2번이 모두 해결 된 상황에서 에러가 발생했기 때문이다. 결국 교수님 찬스를 써서 원인을 알아냈다. 테스트 코드에 있던 @DataJpaTest 때문이었다. 해당 어노테이션에 대한 설명을 보면 다음과 같은 문구..