묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
준영속 관련 질문있습니다.
OrderService에서 order메소드에 public Long order(Member member, Item item) 이런식으로 id가 아닌 엔티티 객체를 바로 받는 식으로 제 개인 프로젝트에서 비슷한 방식으로 해봤습니다.Question과 member가 서로 양방향 매핑관계이구요public class Question { @Id @GeneratedValue @Column(name = "question_id") private Long id; private String title; private String content; private String username; @CreationTimestamp private LocalDateTime dateTime; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; public void setMember(Member member) { this.member = member; member.getQuestionList().add(this); } }public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String emailId; private String username; private String password; private int age; @OneToMany(mappedBy = "member") private List<Question> questionList=new ArrayList<>();OrderService에서 question을 save할 때 public Question save(Member member,Question question) { question.setMember(member); question.setUsername(member.getUsername()); question.setTitle(question.getTitle()); question.setContent(question.getContent()); questionRepository.save(question); return question; }failed to lazily initialize a collection of role: post.study.entity.Member.questionList, could not initialize proxy - no Session(제 개인 프로젝트라 엔티티 경로가 다릅니다.)이런식으로 에러가 나더라구요. 이게 controller 단에서 들어온 엔티티라 해당 서비스 트렌젝션 내에서는 JPA가 관리해주지 않는 준영속 상태 같은 개념인 것 같은데 정확하게 개념이 잡히지 않아서 질문드립니다.public Question save(Long memberId, Long questionId) { Member member = memberRepository.findById(memberId).get(); Question question = questionRepository.findById(questionId).get(); question.setMember(member); question.setUsername(member.getUsername()); question.setTitle(question.getTitle()); question.setContent(question.getContent()); questionRepository.save(question); return question; }id값을 받아서 해당 서비스 트렌젝션 내에서 직접 엔티티를 조회해야 같은 트렌젝션 내에서 엔티티가 JPA에 의해 관리되서 그런건가요? 개념을 정확히 잡고 싶습니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
스프링 부트 버전
[질문 내용]스프링 부트 2.7.9 버전 쓰면 될까요??3.0.4 도 있는데 둘 중에 뭘 고르면 될까요??
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
Identity 생성 전략에서 em.persist(entity) 호출 시 동작 과정 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 강의를 듣다가 기본키 생성전략으로 IDENTITY를 사용했을 때, 동작 과정이 명확하게 이해되지 않아서 질문드립니다. 현재 제 생각에는em.persist(entity) 호출 -> pk값이 null인 상태로 1차 캐시에 저장(영속 엔티티) -> Insert 쿼리가 DB에 전달 -> DB에서 PK 값 생성 -> PK값을 조회해서 영속 엔티티에 적용하고, PK 값이 적용된 영속 엔티티가 스냅샷으로 사용됨.이런 과정으로 진행되는 것 같은데, 제가 생각한 과정이 맞는 지 질문드립니다..감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
라이브러리 인식?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]외부 라이브러리 인식이 잘 되지 않습니다. 여러가지 방법을 시도해봤더니.. 왼쪽 목록에서 build.gradle 오류표시가 사라지지않습니다....테스트와 http://localhost:8080 로 확인 하였으나 따로 오류 발생은 하지 않았습니다. 외부라이브러리만 인식이 안되는 것 같은데 이유를 알수있을까요?build.gradleplugins { id 'java' id 'org.springframework.boot' version '2.7.8' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'jpabook' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' developmentOnly 'org.springframework.boot:spring-boot-devtools' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //JUnit4 추가 testImplementation("org.junit.vintage:junit-vintage-engine") { exclude group: "org.hamcrest", module: "hamcrest-core" } test { useJUnitPlatform() } 외부라이브러리 주소는 implementation("com.github.gavlyukovskiy:p6spy-spring-boot-starter:${version}") implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' 이거 두개 사용해 봤고 깃허브에 나온 버전 다른 것도 사용시 안됨요 memberRepositoryTestpackage jpabook.jpashop; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; import ch.qos.logback.core.joran.conditional.IfAction; @RunWith(SpringRunner.class) //스프링과 관련된걸 테스트 할거야~ @SpringBootTest public class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional @Rollback(false) //롤백안하고 커밋하는 것 public void testMember() throws Exception { //given Member member = new Member(); member.setUsername("memberA"); //when Long savedId = memberRepository.save(member); Member findMember = memberRepository.find(savedId); //then Assertions.assertThat(findMember.getId()).isEqualTo(member.getId()); Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); Assertions.assertThat(findMember).isEqualTo(member); System.out.println("findMember==member : "+ (findMember == member)); } }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
생성메소드
생성메소드에 대해 잘 이해가 안가네요어떨때 사용하게 되는건가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
cascade, orphanRemoval에 관련하여 질문드립니다.
강사님 안녕하세요. 아까 올렸던 반납 관련 질문에 대해서는 정말 좋은 답변 감사하다는 말씀 먼저 드리고 싶습니다. 이번 강의에서 cascade, orphanremoval을 설정하면 연관데이터가 함께 삭제되는 것으로 이해하였습니다. 그런데 cascade, orphanremoval가 따로 설정되어있지 않는 경우에 onetoMany로 연관관계가 설정되어있는데도, 둘 중 하나의 테이블에서 데이터를 삭제했을때 문제가 없다는 점은 연관관계?라고 할 수 없는 부분도 있다고 생각하는데 혹시 제가 잘못 이해한 것일까요?예전에 mysql을 배울때는 한 테이블에 외래키 제약 조건을 걸면 부모테이블의 데이터를 삭제할때 에러가 뜨는것으로 배웠던 기억이 있습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 생성 메서드 createOrder() 질문
==[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]주문 생성 메서드인 createOrder()의 파라미터로 가변인자인 OrderItem...을 사용하셨는데 List를 사용하지 않고 특별히 가변인자를 사용하신 이유가 있을까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
반납 기능 관련해서 질문드립니다.
강사님 안녕하세요. 이번 강의에서 BookService에 returnBook을 만들어주었는데요, 실행을 하면 반납을 했음에도 불구하고, 같은 이름의 사용자가 이미 반납한 책을 또다시 반납해도 오류가 발생하지 않고, 반납에 성공했다고 결과가 나오는 것을 알게되었습니다.제 생각에는 UserLoanHistory history = userLoanHistoryRepository.findByUserIdAndBookName(user.getId(), request.getBookName()) .orElseThrow(IllegalArgumentException::new);해당 코드에서 findby부분에is return도 추가하여 userLoanHistoryRepository.findByUserIdAndBookNameAndIsReturn(user.getId(), request.getBookName(), false)로 해주어야 대출중인 책을 반납하는 동작이 한번 이루어지고, 중복반납이 안될거 같은데 혹시 제가 이해를 잘못한건지 궁금합니다. 감사합니다!
-
미해결실전! Querydsl
QueryDSL 5.0.0 기준으로 강의 내용을 정리했는데 올바르게 이해한 것일까요?
searchPageSimple(): 조회 쿼리와 카운트 쿼리를 한번에 실행searchPageComplex(): 조회 쿼리와 카운트 쿼리를 분리QueryDSL 5.0.0부터는 fetchResults()와 fetchCount()를 deprecated 메서드로 공지함에 따라, 강의 내용처럼 searchPageSimple()과 searchPageComplex()를 구분해서 구현할 필요 없이 searchPageComplex()의 방식으로만 구현하면 됨.@Override public Page<MemberTeamDto> searchWithPaging(MemberSearchCond cond, Pageable pageable) { // 데이터 조회 쿼리 (페이징 적용) List<MemberTeamDto> content = queryFactory .select( new QMemberTeamDto( member.id.as("memberId"), member.username, member.age, team.id.as("teamId"), team.name.as("teamName") ) ) .from(member) .leftJoin(member.team, team) .where( usernameEq(cond.getUsername()), teamNameEq(cond.getTeamName()), ageGoe(cond.getAgeGoe()), ageLoe(cond.getAgeLoe()) ) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); // count 쿼리 (조건에 부합하는 로우의 총 개수를 얻는 것이기 때문에 페이징 미적용) Long total = queryFactory .select(member.count()) // SQL 상으로는 count(member.id)와 동일 .from(member) .leftJoin(member.team, team) .where( usernameEq(cond.getUsername()), teamNameEq(cond.getTeamName()), ageGoe(cond.getAgeGoe()), ageLoe(cond.getAgeLoe()) ) .fetchOne(); return new PageImpl<>(content, pageable, total); } 이 때, total을 아래와 같이 구할 수도 있지만long total = queryFactory .selectFrom(member) .leftJoin(member.team, team) .where( usernameEq(cond.getUsername()), teamNameEq(cond.getTeamName()), ageGoe(cond.getAgeGoe()), ageLoe(cond.getAgeLoe()) ) .fetch() // 조건에 부합하는 전체 데이터를 조회 (List) .size(); // List의 길이로 total을 구하기count 함수는 SQL 차원에서 지원하기 때문에 굳이 이렇게 전체 데이터를 받아온 뒤에 애플리케이션 레벨에서 별도로 size()를 호출해서 구할 필요 없고, 처음부터 카운트 쿼리를 호출하는 것이 나음.이유는 전체 데이터를 불러오고 나서 size()로 구하는 방식은 영속성 컨텍스트에 데이터를 전부 받아온 뒤에 개수를 따로 세는 것이기 때문에 불필요하게 메모리를 잡아먹기 때문. total을 구하는 방식에 대한 내용은 강의에 언급되지 않았기 때문에 제가 따로 검색해보고 내린 결론입니다. 제가 생각한 것이 맞는지 궁금합니다.이외에도 잘못된 부분이 있다면 지적해주시면 감사하겠습니다.
-
미해결실전! 스프링 데이터 JPA
entity수정
//@NoArgsConstructor(access = AccessLevel.PROTECTED)setter사용은 신중하게 선택하라고 하셨는데,Service에서 수정을 하려고 하때, setter사용안하고 생성자로 수정을 하려고 했지만 안되었습니다.service에서 entity 수정시에는 무조건 setter 수정해야한가요??
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
보상 트랜잭션의 대한 후속 강의 문의합니다.
강의를 다 들어가는데요~ msa에서 예외가 발생 시 보상 트랜잭션의 대한 후속 강의를 제작한다고 들었습니다!해당 후속 강의는 정말 중요한 강의라고 생각되는데.. 언제쯤 업데이트 하실 계획이실까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
30강 오류
안녕하세요 선생님.30강에서 서버를 실행시키고 책 등록을 하면 오류가 뜹니다. 그런데 application.yml 설정 중 jpa hibernate ddl-auto를 create drop으로 바꾸면 오류가 안 뜨고 책 등록이 되긴 하는데 서버를 다시 시작하면 테이블이 사라집니다. 이걸 어떻게 해야 할까요?감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
멤버와 주문이 양방향으로 되어있는데 멤버에서 주문 내역을 보려면 어떻게 하나요?
member = MemberRepository.findId(1)member.getOrders() 하니까 무한루프 나네요
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Item과 OrderItem의 연관관계 질문입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 영상속에서 OrderItem과 Item이 다대일 관계라고 설명하셨는데 그 부분이 잘 이해가 되지 않습니다.예를 들어 Book, Car, Robot이라는 세 종류의 item이 존재한다면 Book에 대한 OrderItem, Car에 대한 OrderItem, Robot에 대한 OrderItem... 이런식으로 일대일 매핑 관계가 아닌가요??
-
미해결실전! 스프링 데이터 JPA
스프링 3.0 에러
실전! 스프링 데이터 JPA 강의를 수강도중에 강의 자료에 스프링 3.0에 관해 이야기 적혀있어서 한번 도전해볼 생각으로 프로젝트 파일을 만들어 실습을 따라 하는 도중 프로젝트 환경설정 하는부분에서 에러나서 질문을 올리게 되었습니다.현재 스프링 버젼에서 최신버젼인 2.7.9 로 하면 에러없이 잘 동작하는 반면 3.0.1 로 실행하면 README.md 에 로그를 올려둔 것처럼 에러가 발생하여 동작하지 않습니다.java 버젼 17 확인,패키지 이름들도 javax -> jakrata 로 변경,h2 database 2.1.214 버젼 확인hibernate 버젼 6 이상 확인검색해보니 이렇게 확인하라고 하는거 말고는 다른 방법을 알려주는게 없었습니다.이것저것 시도하는 도중 Member의 Id에 (strategy = GenerationType.IDENTITY) 를 추가하면 에러 없이 동작하게 되는데 무슨 이유인지 알 수 있을까요?https://github.com/JJuuuunn/Inflearn_Data_JPA/tree/Sping_Version_3.0
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테이블 생성
create문과 insert문은 잘 나오는데 h2에 테이블이 생성이 안됩니다 확인부탁드릴께요ㅜhttps://drive.google.com/file/d/1XSgNpKtwNmh7rBbgJ8H38SGNOJQ822eJ/view?usp=sharing
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 코드 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.id to load is required for loading; nested exception is java.lang.IllegalArgumentException: id to load is required for loading 오류 발생합니다 Long orderId 값이 null 값이여서 오류가 납니다. 왜 null값이 들어가는지 이해가 안됩니다. class OrderServiceTest { @Autowired EntityManager em; @Autowired OrderService orderService; @Autowired OrderRepository orderRepository; @Test public void 상품주문() throws Exception{ Member member=new Member(); member.setName("회원1"); member.setAddress(new Address("서울","강가","123-123")); em.persist(member); Book book=new Book(); book.setName("시골 JPA"); book.setPrice(10000); book.setStockQuantity(10); em.persist(book); int orderCount=2; Long orderId = orderService.order(member.getId(), book.getId(), orderCount); Order getOrder = orderRepository.findOne(orderId); assertEquals("상품 주문시 상태는 ORDER", OrderStatus.ORDER,getOrder.getStatus()); } @Test public void 주문취소() throws Exception{ } @Test public void 상품주문_재고수량초과() throws Exception{ } }
-
미해결실전! Querydsl
Projections.fields 관련 질문입니다.
Projections을 이용한 조회 테스트를 하고 있던중Projections.fields에 대해 궁금한점이 있습니다. Dto에 @AllArgsConstructor만 적용하고 Projections.fields를 사용하게 되면 해당 인스턴스를 만들지 못한다고 exception이 발생합니다.영한님께서 강의에서 말쓴하신 Projections.fields의 특성은 getter, setter가 필요가 없고 생성자 또한 필요가 없다라고 하셨는데 이상하게 @AllArgsConstructor를 추가하면 exception이 발생합니다.ex@Getter @AllArgsConstructor public class ArticleFieldsDto{ private Long id; private String title; private LocalDateTime lastModifiedDate; private Long lastModifiedBy; } 예외 로그com.querydsl.core.types.ExpressionException: com.mylaboratory.jpa_and_querydsl.projections.dto.ArticleFieldsDto at com.querydsl.core.types.QBean.newInstance(QBean.java:246) at com.querydsl.core.support.NumberConversions.newInstance(NumberConversions.java:86) at com.querydsl.jpa.FactoryExpressionTransformer.transformTuple(FactoryExpressionTransformer.java:51) at org.hibernate.sql.results.internal.RowTransformerTupleTransformerAdapter.transformRow(RowTransformerTupleTransformerAdapter.java:30) at org.hibernate.sql.results.internal.StandardRowReader.readRow(StandardRowReader.java:109) at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:198) at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:33) at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:443) at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:166) at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.list(JdbcSelectExecutorStandardImpl.java:91) at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:31) at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.lambda$new$0(ConcreteSqmSelectQueryPlan.java:113) at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:335) at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:276) at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:571) at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:363) at org.hibernate.query.sqm.internal.QuerySqmImpl.list(QuerySqmImpl.java:1073) at org.hibernate.query.spi.AbstractSelectionQuery.getSingleResult(AbstractSelectionQuery.java:457) at org.hibernate.query.sqm.internal.QuerySqmImpl.getSingleResult(QuerySqmImpl.java:1103) at com.querydsl.jpa.impl.AbstractJPAQuery.getSingleResult(AbstractJPAQuery.java:214) at com.querydsl.jpa.impl.AbstractJPAQuery.fetchOne(AbstractJPAQuery.java:326) at com.mylaboratory.jpa_and_querydsl.projections.ProjectionsTest.projections_field(ProjectionsTest.java:70) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:727) at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:217) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:213) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:138) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:68) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:71) 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:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) Caused by: java.lang.InstantiationException: com.mylaboratory.jpa_and_querydsl.projections.dto.ArticleFieldsDto at java.base/java.lang.Class.newInstance(Class.java:639) at com.querydsl.core.types.QBean.create(QBean.java:251) at com.querydsl.core.types.QBean.newInstance(QBean.java:222) ... 91 more Caused by: java.lang.NoSuchMethodException: com.mylaboratory.jpa_and_querydsl.projections.dto.ArticleFieldsDto.<init>() at java.base/java.lang.Class.getConstructor0(Class.java:3585) at java.base/java.lang.Class.newInstance(Class.java:626) ... 93 more 예외가 발생하지 않는 경우는 아래와 같습니다.@NoArgsConstructor, @AllArgsConstructor 모두 사용@NoArgsConstructor, @AllArgsConstructor 모두 사용 X@NoArgsConstructor 만 사용
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테이블 생성 안됨
엔티티와 테이블 생성 코드 모두 작성하고 실행을 했는데 테이블 생성이 안됩니다..https://drive.google.com/drive/u/1/my-drive여기에 압축 파일 올렸습니다.확인해봐주시면 감사하겠습니다..!
-
해결됨실전! 스프링 데이터 JPA
Dto로 매핑을 하는데 오류가 생깁니다.
안녕하세요 강의 잘보고 있습니다.혼자 공부하면서 이것저것 해보고 있습니다.다름이 아니라 DB로부터 DTO로 바로 조회를 하고 싶은데 막상 쿼리를 실행하면 적절한 생성자가 존재하지 않는다고 나옵니다.해당 Dto에 롬복을 이용해서 생성자 어노테이션을 붙여보기도 하고 직접 생성해서 코드를 실행 시켜보기도 하였으나 제대로 동작하지 않습니다. 혹시 한번만 봐주실수 있나요? 환경은 다음과 같습니다.자바 : 17스프링부트 : 3.0.2DB : 마리아DB 파일링크https://drive.google.com/file/d/1mJ4S-I938BXV7dtyono_uZfSXQxKtE8Q/view?usp=share_link