묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
님들 아무리봐도 PostCreate PostUpdate는 서비스쪽에 있어야하지 않을까요?
서비스에서 사용하는 모델인 거 같은데제 생각입니다.다른 의견 적어주시면 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
롬복 에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. C:\study\jpashop\jpashop\src\main\java\jpabook\jpashop\JpashopApplication.java:10: error: <identifier> expected hello.setData("hello"); 이런 에러가 뜨는데 원인이 무엇일까요..?
-
미해결실전! 스프링 데이터 JPA
강의 15분경 즉시로딩 실행결과 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.MemberTest 테스트클래스testEntity() 코드입니다. Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(teamA); em.persist(teamB); Member member1 = new Member("member1", 10, teamA); Member member2 = new Member("member2", 20, teamA); Member member3 = new Member("member3", 30, teamB); Member member4 = new Member("member4", 40, teamB); em.persist(member1); em.persist(member2); em.persist(member3); em.persist(member4); //초기화 em.flush(); em.clear(); List<Member> members = em.createQuery("select m from Member m ", Member.class) .getResultList(); for (Member member : members) { System.out.println("member = " + member); System.out.println("-> member.team = " + member.getTeam()); }처음에 즉시로딩 실행결과로멤버 조회 쿼리 하나랑각각 팀 조회 쿼리 +N번 (여기서는 2번) 나가는 것을 확인했습니다. 지연로딩으로도 쿼리실행시점 문제만 다르지 똑같이 member.getTeam() 할때 team쿼리가 나가는 것을 확인했습니다. N+1문제를 해결하기 위해 페치조인을 한다는것은 강의와 학습을 통해 알게되었습니다. 질문이있는데요처음에 즉시로딩할때 조인쿼리가 안나가고왜 따로 member, team쿼리가 나간것일까요? 즉시로딩도 N+1문제가 발생하는것이 맞나요? 수정단건조회 시 즉시로딩으로 left outer join 으로 member와 team이 함께 조회되는것을 확인했습니다.단건조회가 아니라 memberRepository.findAll() 메소드나 JPQL (select m from Member m) 인경우에는 member와 team이 같은 한 쿼리가 아니라따로 조회되는 것인가요? 왜 List를 조회할때에는 같이 join해서 쿼리를 날리지않는것일까요?
-
미해결Practical Testing: 실용적인 테스트 가이드
TEST 코드 내에서 발생하는 쿼리의 바인딩 되는 부분을 볼 수 있나요?
안녕하세요. 강의를 듣다가 테스트를 하며 JPA에서 제공하는 쿼리가 제가 원하는 쿼리가 맞는지 확인함과 더불어 실제 들어가는 값이 제대로 들어가는지 알고 싶을 때가 존재하는데 이때 로그에서 확인할 수 있는 방법이 있을까요?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
트랜잭션의 범위와 준영속 상태
안녕하세요 강의를 수강하다 제가 잘못 이해하고 있는 부분이 있는 것 같아서 질문드리게 되었습니다.다음은 "간단한 주문 조회 V2: 엔티티를 DTO로 변환" 강의에서 35초에 해당하는 화면을 캡처한 부분입니다.orderRepository는 @PersistenceContext 처리된 EntityManager를 가지고 있는데 이 때 Transaction의 범위가 어디까지인지를 잘 모르겠습니다.추측으로는 List<Order> all가 준영속상태로 반환될 것으로 예상했는데 order가 membe프록시 객체를 가지고 있다가 Lazy 강제 초기화가 가능한 것을 보면 영속성 컨텍스트가 여전히 존재하는 상태인 것 같습니다.Transaction의 범위가 어디까지인지 궁금합니다.감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO를 Result<T>에 담아서 반환할 때의 제너릭 표기 여부
안녕하세요DTO를 직접 반환하지 않고 Result로 감싸서 반환하는 것을 구현하는 도중 궁금한 점이 생겼습니다. 일단 코드는 다음과 같습니다./** * DTO를 감싸서 반환하는 클래스 * 반환에 성공하면 status에는 "success", data에는 DTO, error에는 null이 담긴다 * 예외가 발생하면 status에는 "fail", data에는 null, error에는 errorCode가 담긴다 */ @NoArgsConstructor @Getter public class Result<T> { private String status; private T data; private ErrorDTO error; public Result(String status, T data, ErrorDTO error) { this.status = status; this.data = data; this.error = error; } } @PostMapping("/save") public ResponseEntity<Result<UserDTO>> save(@RequestBody @Validated UserDTO userDTO, BindingResult bindingResult) { if (bindingResult.hasErrors()) { for (ObjectError error : bindingResult.getAllErrors()) { return ResponseEntity.ok().body(ResultUtils.fail(error.getCode(), error.getDefaultMessage())); } } UserDTO savedUserDTO = userService.save(userDTO); return ResponseEntity.ok().body(ResultUtils.success(savedUserDTO)); }public class ResultUtils { private static final String SUCCESS = "success"; private static final String FAIL = "fail"; public static <T> Result<T> success(T data) { return new Result<>(SUCCESS, data, null); } // 이 메서드의 제너릭 표기도 어떻게 해야할지...? public static Result fail(String errorCode, String message) { return new Result(FAIL, null, new ErrorDTO(errorCode, message)); } } 이렇듯 예외가 발생한 경우에 data에는 null을 담아서 반환하고 싶으면, 예외 발생 여부에 따라 Result<T>의 T가 userDTO이기도 하고 null의 2가지...? 인 느낌이 드는데 그럼 public ResponseEntity<Result<UserDTO>> save처럼 메서드 선언부에서 Result의 제너릭을 표기하는 의미가 있을까요? Result로 적는 것이 좋을지 그래도 userDTO를 명시해 줘야할지가 궁금합니다. 추가로 userDTO 단건일시에는 제너릭이 그다지 복잡하지 않지만 만약 DTO에 페이징 기능을 더하여 반환하고자 한다면 Result<Page<UserDTO>> 처럼 제너릭 안에 제너릭이 있게 될텐데 이러한 경우에도 그냥 제너릭을 생략하는 것이 좋을지 궁금합니다!
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@OneToOne(mappedBy)의 쿼리 최적화 방법
안녕하세요!OneToOne(mappedBy = ...)와 관련한 질문을 드립니다.위와 같이 mappedBy로 되어있는 엔티티를 조회하게 되면, LAZY로 설정하여도 반드시 즉시로딩됩니다. 또한, default_batch_fetch_size도 적용되지 않아 반드시 N+1문제가 발생하는 것으로 알고있습니다.여기서 생기는 고민이, 특정 엔티티의 목록을 조회하는 로직을 구현할 때 엔티티를 select절에 넣는것에 대해서 조금 조심스럽습니다. (단건 조회는 즉시로딩이 발생해도 상대적으로 문제의 심각도가 적음)현재 목록을 조회하려는 엔티티에 OneToOne(mappedBy = ..)가 없다면, 엔티티의 목록을 조회해도 N+1 문제와 무관합니다. 하지만, 미래에 추가가 된다면 성능에 문제가 없던 것들도 N+1문제가 생길 수 있습니다.이에 대한 한 가지 해결방법은 Querydsl의 Projection을 사용하는 방법이 있습니다. 이는 결국 select절을 입력해줘야하며 지연로딩과 @BatchSize을 통해 해결하는게 아니기 때문에, 더 복잡한 조인 쿼리를 작성해야할 수도 있습니다. 이로 인해 생산성도 낮아질 수도 있습니다. 정리하자면,select 절에 entity --> 다른 필드를 지연로딩 처리하여 더 쉽게 데이터를 찾지만, 미래에 발생할 수 있는 N+1문제를 어쩔 수 없이 수용한다.select절에 Dto Projection --> 조인 쿼리를 다 작성해야한다. Projection을 기입해야한다. 하지만, @OneToOne(mappedBy)가 추가되어도 쿼리 성능에는 문제가 없다.양쪽의 트레이드 오프가 있는 것 같습니다. 현업에서는 어떠한 방법을 이용하나요? (추가적으로, mappedBy를 이용하지 않거나 하이버네이트에서 제공하는 바이트코드 조작 방법도 있네요)
-
해결됨실전! Querydsl
컨트롤러의 파라미터로 Pageable를 직접 받을까요 혹은 page, size, sort등을 따로 받을까요?
안녕하세요!컨트롤러의 파라미터로 Pageable을 직접 받을 수 있으나 @PageableDefault로는 1가지 기준으로만 정렬이 가능한 것 같은 제약사항이 있는 것으로 알고 있습니다.@SortDefault로 여러개의 정렬 조건을 추가할 수 있다고는 하나 파라미터에 어노테이션이 너무 많아지나..? 싶기도 합니다.또 만약 page라는 변수명이아니라 pageNo처럼 다른 변수명을 사용할 때의 유연성을 위해서라도 Pageable 인터페이스로 직접 받기보다는 페이징의 각 요소를 받아서 PageRequest 객체를 따로 생성하는 것이 더 나을까요?토이프로젝트보다 훨씬 복잡한 상황의 현업환경에서는 어떤 방식이 더 자주 사용되는지 궁금합니다!
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
h2 관련 질문사항이 있습니다
섹션 10 강의를 들으면서 설정값을 바꾼후 busrefresh를 통해 성공적으로 (204)를 반환 받아도 저런식으로 오류가 발생하여 항상 전부 재시작후 실습을 진행중입니다. 어떻게 해결해야할까요?해당 json부분에 이전과 다른 데이터 값을 넣어주면 정상작동합니다. 하지만 제가 알기로는 h2 db의 경우 재시작 할 때마다 데이터가 모두 날라가는걸로 알고 있습니다.spring: datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:testdb username: sah2역시 인메모리 방식으로 잘 되어 있는데 왜 모든 서비스들을 전부 종료하고 재시작해야지만 h2내부의 값들이 사라지는지 궁금합니다.
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
스프링부트
스프2는 스프링부트기반으로 작성하나요? 지금학원에서 스프링부트안적옹해서 시큐리티랑페이징 처리하는걸로프로젝트 하고있거든요
-
해결됨
hibernate 6.x 에서 batch size의 전략 변경하기 아는 분 있으신가요?(batch_fetch_style deprecated issue)
https://www.inflearn.com/questions/34469위 링크를 참조해보면, 이전에 hibernate 의 batch size 기본전략이 legacy 임을 알 수 있습니다.하지만, 현재 사용 중인 hibernate 6.2 에서 @BatchSize 를 사용하면 기본적으로 dynamic 으로 조회되고 있습니다. 참고로 글로벌 설정으로 default_batch_fetch_size 를 설정해도 동일합니다. select ... from my_table m1_0 where m1_0.id in(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) binding parameter [1] as [INTEGER] - [5] binding parameter [2] as [INTEGER] - [1] binding parameter [3] as [INTEGER] - [null] ... binding parameter [98] as [INTEGER] - [null] binding parameter [99] as [INTEGER] - [null] binding parameter [100] as [INTEGER] - [null] 그래서 batch_fetch_style 을 직접 설정하려고 봤더니 hibernate 6.0 이후부터는 deprecated 되었고, MultiKeyLoadSizingStrategy 를 사용하라고 하네요. 혹시 이 MultiKeyLoadSizingStrategy 사용해보신 분 있으신가요?또는 다른 방법으로 batch size 전략을 이전의 기본전략인 legacy 처럼 변경하신 분이나 현재 프로젝트에서 비슷한 issue 겪으신 분 있으신가요?--(아까 오전에 비슷한 질문 올리면서, spring.jpa.properties.hibernate.jdbc.batch_size 사용하면 되는 것 같다고 했었는데 착각이었습니다. 실제로는 n + 1 발생에 영향을 주지 않습니다.)--(추가)MultiKeyLoadSizingStrategy 를 사용하는 부분은 Dialect 입니다. 이때 넘겨받는 numberOfKeys 는 지정한 BatchSize 와 동일합니다. 그리고 아래 코드에 의해 최종적으로 생성하는 ? 의 개수는 최초로 딱 1번, 1개만 생성되는 것처럼 보입니다. 그러면 코드가 dynamic 처럼 작동하는 게 이해는 가네요. 동적으로 id 의 개수에 따라 다른 PreparedStatement를 사용하는 게 아니니까요.만약 BatchSize 를 10으로 정한 필드가 있다면, 해당 필드는 아래 코드에 의해 10(pad=false, column=1) 또는 16(pad=true, column=1) 둘 중 하나의 쿼리만 생성됩니다.위에서 언급한 링크에서 김영한 님 설명대로라면 10 + nlog2 개의 쿼리가 생성되는 데 반해, MultiKeyLoadSizingStrategy 는 딱 하나의 쿼리만을 생성하고 재사용하는 것 같습니다. 그런데 그 쿼리의 ? 의 개수를 '잘' 정하는 거죠.그러면 pad와 numberOfColumns 를 어떻게 바꾸느냐도 알아봐야겠네요... 그리고 최적화에 대한 새로운 패러다임? 자체도 이해할 필요가 있어 보입니다. 아래는 Dialect 추상클래스의 일부분입니다. protected final MultiKeyLoadSizingStrategy STANDARD_MULTI_KEY_LOAD_SIZING_STRATEGY = (numberOfColumns, numberOfKeys, pad) -> { numberOfKeys = pad ? MathHelper.ceilingPowerOfTwo( numberOfKeys ) : numberOfKeys; final long parameterCount = (long) numberOfColumns * numberOfKeys; final int limit = getParameterCountLimit(); if ( limit > 0 ) { // the Dialect reported a limit - see if the parameter count exceeds the limit if ( parameterCount >= limit ) { return limit / numberOfColumns; } } return numberOfKeys; };--(추가)pad 설정은 아래와 같이 하면 됩니다. 기본값은 false 인 것 같네요.spring.jpa.properties.hibernate.query.in_clause_parameter_padding=true그리고, numberOfColumns 는 굳이 건드려야 할 필요는 없어보입니다.--결론적으로 batch_fetch_style 이 deprecated 된 이후에는 기존의 legacy 처럼 여러 개의 statement 를 만들어서 사용하지 못 하고, 각 Entity 의 batch size 를 얼마나 설정하느냐에 따라 Dialect가 그에 대응하는 딱 하나의 statement 를 만드는 것 같습니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
트랜젝션 범위와 준영속 상태
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? ([예]/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ([예]/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? ([예]/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요! 강의에서 [회원 수정 API] 파트에서 질문이 있어 이렇게 문의드리게 되었습니다.트랜잭션 범위와 준영속 상태에 관한 질문입니다.우선 Service 계층에서 update에서 member 객체를 준영속 상태로 반환하도록 하였습니다.그 후 Controller 계층에서 PutMapping 방식으로 member의 이름을 "-newhello"로 변경하여 db에 반영하였고그 다음에 member객체의 이름을 "준영속 상태"로 변경 하였습니다. 이미 트랜잭션이 끝나면서 영속성 컨택스트가 종료되었다고 생각했고여기까지는 db의 값이 여전히 "-newhello"라는 것을 확인해서 문제가 없었는데 그 다음이 이해가 가지 않습니다.memberServie에서 findMember를 다시 조회하였는데이 객체가 member와 완전히 동일한 객체로 나옵니다.전 db에서 값을 가져와서 이름이 "-newhello"일 것으로 예상했는데 이렇게 된 이유를 모르겠습니다...마치 db와의 연동은 안되지만 영속성 컨택스트의 1차캐시에 남아있는 member 객체를 같은 id 식별자를 바탕으로 찾아온 것 같아서 혼란스럽습니다. ㅠㅠ
-
해결됨스프링과 JPA 기반 웹 애플리케이션 개발
SecurityConfig 파일 작성중,, WebSecurityConfigurerAdapter 가 deprecated 됬다고 해서 extends가 안됩니다.
안녕하세요. 강의를 열심히 들으려고 하는 한 직장인입니다. 해당 수업 (회원가입 컨트롤러) 를 듣는도중, SecurityConfig 파일 만드는 부분에서 WebSecurityConfigurerAdapter 가 deprecated 되었다고 extends가 안되고 있습니다. 저는 현재 스프링 시큐리티 버전을.. 6 버전대 사용중이에요. 정확히는 6.1.2 버전 사용하는것 같네요.. (이렇게 버전확인해도되는건지 몰르겠습니다..ㅠㅠ) 로그분석과,, 구글링을 좀 해본 결과, RequestMatchers(MvcRequestMatcher) orRequestMatchers(AntPathRequestMatcher) 의 패턴으로 사용을 해야한다고 해서,, 결국 소스를 수정하여. permitAll()은 해결하였습니다.그런데 강의에서 프로필 요청 url은 httpMethod중 get만 허용해야 하는 조건에서, mvcMatchers(HttpMethod.GET, "/profile/*").permitAll() 부분을 도무지 어떻게 대치해야할지를 모르겠습니다. 제가 현재 까지 작성한 소스 공유 드립니다. package com.studyolle.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.servlet.util.matcher.MvcRequestMatcher; import org.springframework.web.servlet.handler.HandlerMappingIntrospector; @Configuration @EnableWebSecurity // 시큐리티 활성화 -> 기본 스프링 필터체인에 등록 public class SecurityConfig { @Bean SecurityFilterChain filterChain(HttpSecurity http, HandlerMappingIntrospector introspector) throws Exception { MvcRequestMatcher.Builder mvcMatcherBuilder = new MvcRequestMatcher.Builder(introspector); http.authorizeHttpRequests((requests) -> requests .requestMatchers( mvcMatcherBuilder.pattern("/"), mvcMatcherBuilder.pattern("/login"), mvcMatcherBuilder.pattern("/sign-up") ,mvcMatcherBuilder.pattern("/check-email"), mvcMatcherBuilder.pattern("/check-email-token"), mvcMatcherBuilder.pattern("/email-login") ,mvcMatcherBuilder.pattern("/check-email-login"), mvcMatcherBuilder.pattern("/login-link"), mvcMatcherBuilder.pattern("/profile/*") ).permitAll() .anyRequest().authenticated() ); return http.build(); } } 해결방안을 자세하게 알려주시면 감사하겠습니다. 시간이 지남에 따라 스프링 정책은 계속 deprecated 되는 것 같은데,,, 너무 나도 배울게 많다고 생각이 됩니다. 잠깐이라도 놓치면 개발의 세계와 너무 멀어지는 느낌이 드네요. 제가 많이 부족하여 따끔한 쓴소리도 같이 부탁드릴께요. 진심 열심히 하려고 노력중입니다.감사합니다. 빠른 답변 부탁드리겠습니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
등록 시 질문
등록 id가 1번과 2번이 있었다가 2번을 삭제하고 다시 등록을 하면 id가 3번으로 등록이 됩니다. 제가 잘못한 걸까요..?? 아니면 혹시 원래 이렇게 돌아가도록 설정하신건가요??
-
미해결실전! Querydsl
querydsl 설정 질문
Spring 3.1.2입니다.설정 완료후 Gradle 리로드 했고 build -> clean과 other -> compileQuerydsl을 하는거까지는 성공을 했는데 build 과정에서 NoClassDefFoundError이 계속 발생 하여 질문 올립니다.'''java: java.lang.NoClassDefFoundError: javax/persistence/Entity'''enable annotation processer 켰습니다.아래는 제 코드 입니다.https://drive.google.com/file/d/1OTWgqoe7F5202wvO1Ugz51nW7XgrlLzJ/view?usp=drive_link
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
table drop 관련해서 질문드립니다.
안녕하세요강의를 듣던 중에 기존에 작성했던 객체(Class)들이 변경돼서 코드를 수정하고 나서 동작이 이해가 안가는 부분이 있어서 질문드립니다.기존의 코드에서 Member 객체는 BaseEntity를 상속받는 상황이었는데 여기서 BaseEntity를 제거하고 다시 실행을 시켰습니다.제가 알기로 create 옵션을 사용하면 모든 Entity가 삭제되고 다시 생성하는 걸로 알고 있는데, 다시 실행해도 BaseEntity의 column들이 db에서 삭제되지 않고 상태를 유지하는 것을 봤습니다.왜 이런 현상이 나는지 궁금합니다.이 문제는 일단 h2 db에서 DROP TABLE 쿼리를 날려서 해결하긴 했습니다. 감사합니다.
-
미해결실전! 스프링 데이터 JPA
NullPointerException발생 이유를 모르겠습니다
테스트 코드를 작성하였는데, NullPointerException이 발생합니다 ..
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
38강 막히는 부분이 있어서 문의드립니다.
안녕하세요 강의 열심히 듣고 있는 학생입니다.프로필도 제대로 설정이 되어있는 상태같은데 도서관관리 페이지에서도 기존 db에 있던 정보 그대로 끌고 오고 혹시나 해서 이름 삭제 후 서버를 재시작했는데도 삭제된 채로 그대로 반영이 되어있어서 메모리에 저장되는거같지 않은 것 같네요 ㅠ그리고 결정적으로 h2-console로 접속하고 url 입력 후 커넥트를 누르니 저런 오류가 뜨는거 보니 뭔가 적용이 제대로 안된거 같은데 어디서 무엇이 어떻게 문제가 있는지 판단하기가 어려워서 질문드립니다 ㅠ
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
Invalid bound statement
mybatis 작성을 다하고 test를 돌리는데 에러가 발생합니다. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): hello.itemservice.repository.mybatis.ItemMapper.save 제가 작성한 코드에 문제가 있는지하고 pdf를 복사해서 돌려보아도 계속 에러가 발생합니다..
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
오류를 해결못하겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요.이제 막 멤버만들어서 시작하는데 오류가 해결을 못하겠어요 자바버전이 높아서 그런건지... 자바 11써요 오류"C:\Program Files\Java\jdk-20\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.2\lib\idea_rt.jar=50553:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\Users\ckehq\Desktop\Java_Spring\jpa\jpa-basic\target\classes;C:\Users\ckehq\.m2\repository\org\hibernate\hibernate-entitymanager\5.3.10.Final\hibernate-entitymanager-5.3.10.Final.jar;C:\Users\ckehq\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\ckehq\.m2\repository\org\hibernate\hibernate-core\5.3.10.Final\hibernate-core-5.3.10.Final.jar;C:\Users\ckehq\.m2\repository\org\javassist\javassist\3.23.2-GA\javassist-3.23.2-GA.jar;C:\Users\ckehq\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\ckehq\.m2\repository\org\jboss\jandex\2.0.5.Final\jandex-2.0.5.Final.jar;C:\Users\ckehq\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\ckehq\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\ckehq\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;C:\Users\ckehq\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.0.4.Final\hibernate-commons-annotations-5.0.4.Final.jar;C:\Users\ckehq\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\ckehq\.m2\repository\net\bytebuddy\byte-buddy\1.9.5\byte-buddy-1.9.5.jar;C:\Users\ckehq\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\ckehq\.m2\repository\com\h2database\h2\2.2.220\h2-2.2.220.jar hellojpa.jpaMain8월 17, 2023 12:37:33 오후 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformationINFO: HHH000204: Processing PersistenceUnitInfo [ name: hello ...]8월 17, 2023 12:37:33 오후 org.hibernate.Version logVersionINFO: HHH000412: Hibernate Core {5.3.10.Final}8월 17, 2023 12:37:33 오후 org.hibernate.cfg.Environment <clinit>INFO: HHH000206: hibernate.properties not foundException in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException at org.hibernate.boot.spi.XmlMappingBinderAccess.<init>(XmlMappingBinderAccess.java:43) at org.hibernate.boot.MetadataSources.<init>(MetadataSources.java:86) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:212) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:174) at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:76) at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:171) at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:119) at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:61) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:50) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at hellojpa.jpaMain.main(jpaMain.java:10)Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ... 12 moreProcess finished with exit code 1pom.xml파일임 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 ">http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>jpa-basic</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>20</maven.compiler.source> <maven.compiler.target>20</maven.compiler.target> </properties> <dependencies> <!-- JPA 하이버네이트 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.3.10.Final</version> </dependency> <!-- H2 데이터베이스 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>2.2.220</version> </dependency> </dependencies></project>도와주세요