묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 데이터 JPA
연관관계없이 테이블 설계 및 JPA Domain Class 작성 문의
안녕하세요. 현재 김영한님의 JPA관련 강의들을 수강하면서 기존 프로젝트에서 JPA 로 변경시 문제가 있어 문의드립니다.배운 것을 실적용할 경우 문제는, 테이블 설계시 제약사항이 테이블 간 연관관계 설정을 하지 않는 것입니다.이 경우 도메인클래스를 어떻게 작성해야 할지 적절한 기준과 방법을 몰라 문의드립니다.간략히 예를들어 DBA권고에 따라 외래키 설정은 모두 하지 않는다고 가정해서 아래와 같이 테이블을 생성했을 시에| COMMENT | | COMMENT_IMAGE | | comment_id(PK)| | comment_img_id(PK)| | user_name(PK) | ------- X ------ | comment_img_name | | comment_id | /* DO NOT USE CONSTRAINT foreign key() references */따라서 기존에 아래와 같은 DTO가 있다면,public class Comment { .... private Long id; private String name; private List<CommentImage> commentImages; .... }로 작성되어 있을 경우 아래와 같이 수정중인데... @IdClass(CommentId.class) public class Comment { .... @Id private Long id; @Id private String name; //@? private List<CommentImage> commentImages; .... }기존에는 따로 CommentImage List<>를 조회해서 넣어주면 됐지만cmt = DAO.getComment(id, name); cmt.setCommentImages( DAO.getCommentImageList( cmt.getId() ) ); return cmt; /* getComment SQL SELECT * FROM COMMENT WHERE COMMENT_ID = :id AND USER_NAME = :name; getCommentImageList SQL SELECT * FROM COMMENT_IMAGE WHERE COMMENT_ID = :comment_id; */ JPA의 경우 Domain 클래스에서 Join관련 어노테이션 설정이 없으면 Could not determine recommended JdbcType 오류가 발생합니다. 이 경우 연관관계 생성없이 도메인을 설계하고 사용하는 방법을 알 수 있을까요?
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
DTO를 Result<T> 클래스에 담아서 반환할 때의 예외처리
안녕하세요!영한님 강의를 들으면서 추가적으로 RestTemplate에 대해 알게되어 지금까지 배운 것을 복습할 겸 api와 DTO 통신에 대해 연습하고 있었습니다.DTO를 반환할 때, 그냥 주기보다는 Result<T>의 data같은 속성에 담아서 주는 것이 바람직하다고 하여 그 응용을 연습해 볼겸 Result<T>에 status 속성을 추가해보았습니다.status 속성은 외부 api에서 조건을 충족하는 api를 찾아 와서 반환할 DTO가 있을 경우 "success"를, 조건을 충족하는 api를 찾지 못하여 HttpClientErrorException 예외가 발생할 경우 "fail"을 담아서 반환하고자 하였습니다.아래의 코드를 통해 구현은 성공하였으나, Service 클래스에서 try-catch문을 사용하는게 좀 찜찜하여 혹시 try-catch문 없이 구현하는게 더 좋을지 아니면 그냥 사용해도 좋은지가 궁금하여 질문을 하게 되었습니다.(status가 "fail"이면 data는 null을 반환하게끔 설계해보았습니다) @RestController @RequiredArgsConstructor @RequestMapping("/summoners") public class SummonerController { private final SummonerService summonerService; @GetMapping public ResponseEntity<Result<SummonerDTO>> findSummonerApi(@RequestParam String name) { SummonerDTO summonerDTO = summonerService.findSummonerApi(name); if (summonerDTO == null) { return ResponseEntity.ok().body(new Result<>("fail", null)); } return ResponseEntity.ok().body(new Result<>("success", summonerDTO)); } }@Slf4j @Service @RequiredArgsConstructor public class SummonerService { @Value("${apiKey}") private String apiKey; private final SummonerRepository summonerRepository; private final RestTemplate restTemplate; // riot에서 소환사 정보 api를 받아오는 메서드 public SummonerDTO findSummonerApi(String name) { String url = "https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/{summonerName}"; HttpHeaders headers = new HttpHeaders(); headers.set("X-Riot-Token", apiKey); try { return restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(headers), SummonerDTO.class, name).getBody(); } catch (HttpClientErrorException e) { return null; } } }Controller와 Service의 코드는 위와 같습니다. (restTemplate은 별도의 설정파일에 빈으로 구현하였습니다)
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
복합키에서 시퀀스 컬럼에 대한 질문 드립니다.
[질문 내용]안녕하세요.개인 토이 프로젝트를 JPA를 활용하여 개발하다가 복합키와 관련하여 질문 드립니다.현재 계좌라는 테이블에 1:N 매핑되어 거래 이력을 관리하는 이력 테이블을 설계했습니다. 해당 엔티티에 대한 기본키를 복합키로 설정했는데요. 식별관계 복합키로 계좌번호(FK)+거래날짜+시퀀스로 방향을 잡았습니다.복합키 설정 중, 더 객체지향적인 방식이라는 @EmbeddedId 방식을 채택해서 사용했는데요. 복합키를 정의한 클래스의 필드에 시퀀스 필드에@GeneratedValue를 붙여 db에 저장될 시에 시퀀셜하게 번호가 채번될 거라고 생각했는데 결과는 널값이 들어 가더군요. 구글링을 해보니, 마찬가지 경우를 겪은 분들의 글을 보았고, @EmbeddedId 방식에서는 해당 @GeneratedValue를 사용 못한다는 것을 알게 되었습니다. 이에 대한 대안으로 다른 분들은 아예 복합키를 사용하지 않고, @GeneratedValue를 적용한 ID필드로 하나의 기본키를 두거나, 복합키의 또 다른 방법 중 하나인 @IdClass를 활용하고, @SequenceGenerator를 적용하여 시퀀스를 따로 관리해주는 식으로 하여 제가 처음 원하던대로 복합키에서도 시퀀스를 사용하는 것을 보았습니다.질문은 실무에서는 이런 이력성 엔티티에 대해 어떤 방식은 사용하는지 궁금합니다. 사실 별도의 기본키 하나를 두고, 구현을 하자면.. 결과적으로 나중에 이력을 조회하고자 한다면 기본키가 아닌 값들로 조건을 줘서 쿼리가 나가게 될텐데.. DB 성능적인 부분에서 비효율적이지 않을까 싶고,,, @IdClass로 복합키를 설정하자니 이렇게 하는게 적절한 방법인가 싶습니다.긴 질문 읽어주셔서 감사합니다!! :)
-
미해결실전! 스프링 데이터 JPA
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 성능 테스트를 해보고 QueryHint 를 적용할지 고민하라고 하셨는데 성능 테스트란 정확하게 어떤 걸 의미하나요? 부하 테스트 인지 맞다면 예시가 뭐인지 궁금합니다.그리고 성능 테스트를 하면 QueryHint 를 쓰는게 더 성능이 좋게 나올텐데 그럼 쓰는 게 낫지 않나 하는 궁금증이 듭니다.
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
40강 git bash 에서 git 사용에 관한 질문입니다.
안녕하세요 강사님,강의 정말 잘 듣고 있습니다!40강 관련 질문입니다.git init 명령어를 터미널에서 사용하니 C:/Users/library-app/.git: Permission denied이런 오류가 발생해서 git bash에서 git init을 사용해 보았더니 되더군요.그런데 git add . 입력하면 위와 같은 Permission denied가 또 발생합니다..git status를 입력 하면 아래와 같이 나왔습니다구글링 해 보니 ssh key를 등록하라고 해서 따라서 해 보고 github repository도 삭제했다가 다시 만들어서 실행 해 보았는데도 이렇습니다.무슨 이유에서 인지 .gitignore 파일도 만들어지지 않습니다.제가 구글링으로 해결하려고 이것저것 따라 하다가 더 꼬인 것 같긴 한데....도저히 어디서 부터 잘못된 것인지 모르겠어서 질문드립니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
save와 saveAndFlush 함수의 차이
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]save와 saveAndFlush 함수의 차이가 궁금해 질문남깁니다. 인터넷에서는 보통 save는 영속성 컨텍스트에 등록, saveAndFlush는 DB에 바로 저장이라고 하는데 아래의 블로그를 보니 DB에 바로 저장하는게 아닌 것 같아요.https://ramees.tistory.com/36 강의에서는 'flush = 쓰기 지연 SQL에 등록 > 이 쿼리를 DB로 전송' 이라고 설명하셨는데, 위 블로그의 실험에 따르면 saveAndFlush는 '쓰기 지연 SQL에 등록' 까지만 이루어지는 함수인가요? 그렇다면 save/saveAndFlush 두 함수 모두 실제 DB insert는 @Transactional이 끝난 후에 이루어지는건가요? 또한 위의 블로그에 따르면 @Transactional 어노테이션이 없으면 save/saveAndFlush 실행 직후 insert문이 나가고, @Transactional 어노테이션이 있으면 변화가 생긴다는데 왜 이런 변화가 생기는 건지궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
generated 폴더와 Q class import에 관한...
[질문 내용]여기에 질문 내용을 남겨주세요.1. Tasks - other에 compileQuerydsl이 없어서 compileJava를 눌러서 했는데 괜찮은지 ??2.강사님과 다르게 build /generated 이렇게 생성되어도 문제가 없는지?저런식으로 Q파일들이 생성되었는데 import가 안되고 사용이 안되는 이유 알려주시면 감사하겠습니다.
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
java.lang.NullPointerException: null
책 이름 등록하고 사용자가 대여하는 기능을 하고있는데책 대출 기능에서 사용자이름과 책이름을 입력하고 저장하게되면내부 서버오류 500 뜨면서 java.lang.NullPointerException: null 이라고 나옵니다.구글링을 해봤는데 해결이 안되서 질문드립니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
다대다 양방향은 어떻게 사용해야하나요 ?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]수업에 다대다 단방향만나와서 양방향하는 방법을 알고 싶습니다.쉽게 말해서 한 학생이 여러과목을 들을 수 있는데 과목의 입장에서는 다양한 학생들이 있으니 그렇게 양방향으로 보고 싶습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
실무에서 지연로딩이 사용되는 경우
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니요)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의를 보고 엔티티를 설계하여 프로젝트를 진행하고 있습니다. 강의에서 말씀해주신대로 모든 FetchType을 LAZY로 하여 개발하고 있는데 문득 지연로딩이 실제로 어떤 상황에 필요한지가 궁금해졌습니다.강의에서 말씀해주신대로 연관관계 매핑 데이터를 즉시 가져오지 않고 필요할 때 사용할 수 있도록 할 때 지연로딩을 사용한다는 것은 이해했습니다.실무에서 어떤 상황에 적용되는지 찾아보니, 여러 이미지들을 스크롤하면서 이미지를 실제로 화면에서 보게 될 때 사용하면 효율적이라는 포스팅을 보았습니다.그런데 또 실무에서는 OSIV를 off한다고 보았습니다. OSIV가 off라면 영속성 컨텍스트가 Service, Repository에서만 살아있게 되어 어쨌든 Service 단에서 모두 처리해야 하는데 그렇다면 지연로딩이나 즉시로딩이나 별 차이가 없는 것 아닌가요?? 혹시 제가 잘못 알고 있는 것이 있는지, 어떤 상황에서 지연로딩을 사용하는 것이 좋은지 궁금합니다. 감사합니다:)
-
미해결Practical Testing: 실용적인 테스트 가이드
섹션 2의 단위테스트 세분화하기에서요 !
public void add(Beverage beverage, int count) { if (count <= 0){ throw new IllegalArgumentException("음료는 1잔 이상 주문하실 수 있습니다."); } for (int i = 0; i < count; i ++) { beverages.add(beverage); } } // 위 코드랑 아래 테스트에 대해서 이해가 안되서요 ! @Test void add() { CafeKiosk cafeKiosk = new CafeKiosk(); Beverage latte = new Latte(); cafeKiosk.add(latte); int expectedSize = 1; int actuallySize = cafeKiosk.getBeverages().size(); String expectedName = "라떼"; String actuallyName = cafeKiosk.getBeverages().get(0).getName(); Assertions.assertThat(actuallySize).isEqualTo(expectedSize); Assertions.assertThat(actuallyName).isEqualTo(expectedName); } @Test void addSeveralBeverages() { CafeKiosk cafeKiosk = new CafeKiosk(); Beverage latte = new Latte(); cafeKiosk.add(latte, 2); Assertions.assertThat(cafeKiosk.getBeverages().get(0)).isEqualTo(latte); Assertions.assertThat(cafeKiosk.getBeverages().get(1)).isEqualTo(latte); } 저렇게 add()에 count를 넣어버리면 add()테스트에서 cafeKiosk.add(latte, 1)으로 수정하던지 해야 에러가 안나는 거 아닌가요? 강의에서는 그냥 진행하셔서 여쭤봅니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Enum 리스트를 위한 엔티티를 만드는 방식이 궁금합니다.
엔티티에 Enum 클래스의 리스트를 포함시키려고 합니다.예를 들어서 Person이라는 엔티티가 Hobby라는 Enum 클래스의 리스트를 가질 때,PersonHobby라는 엔티티를 만들고 그 안에 Hobby를 적용시켜서 두 엔티티 사이의 연관관계를 만들려고 합니다.이 때, Person엔티티와 PersonHobby엔티티는 일대다 관계로 만드는 게 맞을까요? 다대다 관계로 만드는 게 맞을까요?하나의 동일한 취미를 여러 사람이 가질 수 있으니 다대다 관계일 수도 있다고 생각되는데, 이전에 값 타입 컬렉션 영상에서는 이러한 상황에서 일대다를 권장한다고 했기 때문에 헷갈려서 질문을 남깁니다.
-
미해결실전! Querydsl
현시점 QueryDSL에 대한 의견이 궁금합니다.
안녕하세요 김영한님!저는 2년차 백엔드 개발자 주니어입니다. 다름 아니라, QueryDSL이 2021년 5.0.0 버전 이후 새로 릴리즈되고 있지 않습니다.그래서 만약 새로운 서버에 대한 기술 스택을 정할 때, QueryDSL에 대한 영한님의 의견이 어떨지 궁금하여 글을 작성하게 되었습니다.("영한님 의견대로 도입한다 vs 안 한다" 같은 상황이 아니라 단순히 의견이 궁금한 겁니다!) 현재 거론되고 있는 대체 라이브러리는 대략 다음과 같은 것 같습니다.jooqkotlin-jdsl (코틀린 한정)MyBatis 만약 영한님이라면 현시점에서 QueryDSL을 선택하실 것 같나요? 다른 기준이 필요하다면 무엇일까요?혹은 요새 관심있는 라이브러리가 있으실까요?의견이 궁금합니다!감사합니다.
-
해결됨실전! Querydsl
fetchResults(), fetchCount() deprecated
안녕하세요countQuery 최적화까지 잘 들었는데요. queryDsl 특정버전 이상에서는 fetchResults(), fetchCount() 가 deprecated 되어었네요.그러면 앞으로 queryDsl 로 페이징을 처리할 때는.count(), content() 쿼리 동시에 X : searchPageSimple() 함수에서 사용한 fetchResult() 는 사용X 이므로.쿼리 최적화 방법도 X : 리턴값에 fetchCount() 를 사용해야 하므로.count(), content() 쿼리 별도로 날리고 (https://www.inflearn.com/questions/806452 참고) count() 쿼리시에는 sql의 count() 함수와 fetchOne() 을 사용한다.정리하면 3번의 방법을 사용하되, 이번 강의에서 말씀해주신 특정 조건에만 날아가는 쿼리도 사용은 못하는 것(fetchCount() Depcreaed 이므로) 맞을까요? 감사합니다.
-
해결됨생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
클라이언트에서 토큰을 서버로 줄 때
클라이언트(안드로이드)가 카카오에서 발급받은 엑세스토큰을 백으로 주는 상황일 때강의영상 토큰 발급 구현 (1), (2)는 작성하지 않아도 되는걸까요??
-
미해결실전! Querydsl
constructor 방식 Enum List argument type mismatch 질문
안녕하세요 영한님! 저는 강의 후에 개인 프로젝트를 진행중인데요@Column(nullable = false) @ElementCollection private List<Tech> techs;Post class에 해당 Enum type List가 있습니다.package project.como.domain.post.model; import lombok.AllArgsConstructor; import lombok.Getter; @Getter @AllArgsConstructor public enum Tech { Java("Java"), Spring("Spring"); private String stack; } 그런데 Projections.constructor 방식으로 Dto를 만들때 에러가 발생합니다.List<PostAbstractResponseDto> content = queryFactory .select(Projections.constructor(PostAbstractResponseDto.class, post.title, post.category, post.state, post.techs )) .from(post) .where(stateEq(condition.getState()), categoryEq(condition.getCategory()), techsContains(condition.getTechs())) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch();post.techs와 조건식을 제외하고 조회할 때는 정상적으로 잘 동작하지만, post.techs를 넣는 경우에 argument type mismatch 에러가 발생하네요. 무슨 문제인지 궁금합니다. 감사합니다 :)
-
미해결실전! Querydsl
연관관계 편의 메소드 관련 , select시 return이 2개 나올때 질문
jpa로 토이프로젝트를 하고 있는데 아래와 같이 여정 정보를 저장하는 코드 입니다.저장할 Journey를 Entity로 변경 후 setTravel로 매핑합니다.그 후 전체 Travel 데이터를 return하는데 return되는 값에 저장했던 Journey가 2개 들어 있습니다. 왜그런지 이유를 잘 모르겠습니다. ㅠ.ㅠ @Transactional public List<TravelDto.Response> addJourney(Traveler traveler, Long travelId, JourneyDto.Request newJourney) throws IOException { Travel travel = travelRepository.findTravelByTravelerIdAndTravelId(traveler.getId(), travelId); Journey newJourneyEntity = newJourney.toEntity(); newJourneyEntity.setTravel(travel); return getTravel(traveler); } public List<TravelDto.Response> getTravel(Traveler traveler) { return travelRepository.findByTravelerIdOrderByOrderKeyAsc(traveler.getId()) .stream() .map(TravelDto.Response::new) .collect(Collectors.toList()); } public void setTravel(Travel travel) { if (this.travel != null) { this.travel.getJourneys().remove(this); } this.travel = travel; travel.getJourneys().add(this); }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
java.lang.IllegalStateException: Failed to load ApplicationContext
junit4로 작성했고 처음에 테스트 케이스가 없다고 해서 설정에서 run using tests를 intllij로 바꿔서 했는데java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:98) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:248) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at org.junit.runners.ParentRunner.run(ParentRunner.java:413) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1157) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:911) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:136) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:141) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:90) ... 27 moreCaused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:284) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:246) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:223) at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:175) at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:295) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:252) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:223) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:173) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1460) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1494) at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ... 42 moreCaused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100) at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:138) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:272) ... 59 more이렇게 오류가 뜨네요2시간째 이것만 붙들고 있는데 뭐가 문제인걸까요? ㅠㅠ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
package 네임에서 에러가 발생했습니다
[질문 내용]위 방식으로 프로젝트 생성 후에 package 네임에서 에러가 발생하면서 main 메서드 실행이 안되는데 어떻게 해결하는 건가요? ㅠㅠ 구글에 검색해봐도 모르겠어서 질문합니다
-
미해결실전! Querydsl
JPAQueryFactory 의 @Bean 등록
안녕하세요,위 사진처럼 JPAQueryFactory를 별도로 생성해주거나, 아니면 JPAQueryFactory 를 별도로 @Bean 등록해서 생성자 파라미터로 주입받거나 두가지 방식으로 아무거나 해도 되잖아요? 그런데 문득 궁금한데, 습관처럼 사용하던 EntityManager 같은 것들은 Spring이 자동으로 @Bean 으로 등록해서 관리하고 있는 거죠? 그렇다면 JPAQueryFactory는 왜 별도로 스프링이 @Bean 으로 자동 등록해두지 않은 거죠? 감사합니다.