묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Order 도메인 this.member 부분 에러
강의 내용중, Order 도메인을 작성할때 다음 스크린샷처럼 Member, Delivery 엔티티를 사용하여 this 키워드를 사용할때 Cannot access jpabook.jpashop.domain.Member 에러가 나고 있습니다. Member와 Delivery, Order 는 모두 예시로 올려주신 코드와 확인하여 똑같이 작성한걸 확인했지만 혹시 몰라 제가 작성한 코드를 같이 올리겠습니다. package jpabook.jpashop.domain; import lombok.Getter; import lombok.Setter; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String name; @Embedded private Address address; @OneToMany(mappedBy = "member") private List<Order> orders = new ArrayList<>(); } package jpabook.jpashop.domain; import lombok.Getter; import lombok.Setter; import javax.persistence.*; @Entity @Getter @Setter public class Delivery { @Id @GeneratedValue @Column(name = "delivery_id") private Long id; @OneToOne(mappedBy = "delivery", fetch = FetchType.LAZY) private Order order; @Embedded private Address address; @Enumerated(EnumType.STRING) private DeliveryStatus deliveryStatus; } package jpabook.jpashop.domain; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import javax.persistence.*; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import static javax.persistence.FetchType.*; @Entity @Table(name="orders") @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) // 이거는 한 도메인 안에서 생성 메서드 등을 통해 로직을 구현했을 경우에 // 접근을 막기위해 사용한다 // 누구는 여기 만들어진 createOrder 를 통해서 주문을 생성하고 // 누구는 Order order = new Order -> order.setOrder로 생성하고 하면 나중에 골치아파치므로 // 애초에 public 으로 지정되어 있지 않은거 + 롬복통한 getter setter 를 통한 코딩을 막아준다 public class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne (fetch = LAZY) @JoinColumn(name="member_id") private Member member; @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) // cascade all 걸어주면 private List<OrderItem> orderItems = new ArrayList<>(); // persist(orderItemA) // persist(orderItemB) // persist(orderItemC) // persist(order) 를 cascase all 안걸어주면 이렇게 넣어야하는데 // 걸어주면 persist(order)하면 자동적으로 다 넣어줌 딜리트도 마찬가지로 다 같이 지워줌 // 즉, 원래는 order 에 들어가는 delivery 나 orderItems 등은 다른 테이블에 같이 걸려있잖아 그걸 // 일일히 다 테이블마다 찾아가서 넣어줘야하는데 cascade all 걸어주면 알아서 그걸 다 연동해서 cd 해줌 @OneToOne (fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name="delivery_id") private Delivery delivery; private LocalDateTime orderDate; @Enumerated(EnumType.STRING) private OrderStatus status; // 주문상태 order cancel //연관관계 편의 메서드 = 양방향일때 쓰면 편한 메소드 //이게 뭐냐면 연관관계 맺어줬으면 DB딴에서는 이런거 안해줘도 다 알아서 동작하긴 하는데 // 비지니스 로직상에서는 이렇게 set할수 있는 연관관계 메서드가 있어야 구현할때 편함 public void setMember(Member member){ this.member = member; member.getOrders().add(this); } public void addOrderItem(OrderItem orderItem){ orderItems.add(orderItem); orderItem.setOrder(this); } public void setDelivery(Delivery delivery){ this.delivery=delivery; delivery.setOrder(this); } //연관관계 메서드 위치는 컨트롤하는쪽에 위치하는게 좋음 비지니스 로직에 의하면 // public static void main (String[] args){ // Member m = new Member(); // Order o = new Order(); // // m.getOrders().add(o); --> 이거 할필요가 없어짐 // o.setMember(m); // } // 원래는 연관관계 메서드가 없으면 이렇게 일일히 비지니스 로직딴에서 데이터 객체 생성후 member 에도 넣어주고 order 에도 넣어주고 해야하는데 // 연관관계 메서드를 만들어 놓으면 로직딴에서 저짓할필요가 없이 편해짐 // ... 은 가변파라미터, String 이라 치면 몇개를 넣어도 다 카바 가능 -> list = 가변파라미터 하면 다 리스트에 들어감 차곡차곡 //생성메서드 public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems){ Order order = new Order(); order.setMember(member); order.setDelivery(delivery); for (OrderItem orderItem:orderItems) { order.addOrderItem(orderItem); } order.setStatus(OrderStatus.ORDER); order.setOrderDate(LocalDateTime.now()); return order; } //비지니스 로직 //주문취소 public void cancel(){ if(delivery.getDeliveryStatus()==DeliveryStatus.COMP){ throw new IllegalStateException("배송 완료된 상품은 취소불가"); } this.setStatus(OrderStatus.CANCEL); for(OrderItem orderItem:orderItems){ orderItem.cancel(); } } //전체주문가격 조회 public int getTotalPrice(){ int totalprice = 0; for(OrderItem orderItem:orderitems){ totalprice += orderItem.getTotalPrice(); } return totalprice; } } import 구문을 직접 작성하여 엔티티들을 직접 임포트까지 해보고, 로직상에서 아예 jpabook.jpashop.~~ 처럼 직접 임포트 구문을 작성해서 시도도 해보았지만 해결이 되지 않아 질문을 올리게 되었습니다. 확인부탁드립니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
이 강의 수강 후 JPA 로드맵과 스프링 DB
현재 영한님 강의중 스프링DB 1편만 제외하고 모든 강의를 구입 후 MVC2를 수강중인데요. 이 이후에 JPA 로드맵을 수강하기 전에 스프링 DB를 수강하고 가면 좋다는 말이 있던데 차이가 큰가요 ?? 스프링 DB 2편 나오기 까지 기다리기가 싫어서 큰 문제가 안된다면 Spring DB 시리즈를 건너뛰고 JPA로드맵을 따라갈까 하는데... JPA로드맵과 Spring DB의 차이가 무엇인가요 ?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Json 을 객체로 받을 때 질문입니다
예를들어 전 강의에서 영한님이 username : kim, age : 20 이런식으로 하고 Hellodata에도 username과 age 라는 변수가 있었는데요 만약 json의 @RequestBody로 들어오는 변수?들이 Hellodata에 선언되어 있지 않다면 어떻게 되나요 ? 예를들어 Hellodata가 변수가 username 하나밖에 없다고 하면 age는 어떻게 되는 것인가요 ?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@Data v2
v1에서 CreateMemberResponse는 final 키워드, @NotNull이 모두 없으므로 id를 받는 생성자를 새로 생성해주었습니다. v2인 CreateMemberRequest에서도 final 키워드, @NotNull이 모두 없으므로 id를 받는 생성자를 만들어 주어야 할 것 같은데 이 경우 생성 안해준 이유가 궁금합니다. @Datastatic class CreateMemberRequest{ @NotEmpty private String name;}
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
URL에 따라 처리하는 모든 메쏘드와 클래스가
핸들러라고 보면 되는건가요 ? 이번 강의에서는 @RequestMapping , @GetMapping, @PostMapping 등이 붙은 메쏘드가 모두 핸들러인거고 저런 URI에 따라 처리하는 것이 메쏘드가 아니라 클래스단에 있다면 그 클래스도 핸들러라고 봐도 되는건가요 ?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
핸들러와 어댑터의 정확한 구분법?이 뭘까요
핸들러는 Request에 들어오는 파라미터?링크? 에 따라 처리하는 모든 클래스?메소드? 들을 핸들러라고 보면 될까요 ? 왜 @RequestMapping, Controller 인터페이스와 같이 우선순위가 나누어지는 것인가요? 같은 파라미터에 대한 핸들러가 많으면 첫번째로 잡는건가요 ?? 그렇다면 같은 파라미터에 대해 여러가지 핸들러가 있다면 우선순위가 높은 핸들러를 선택하게 되는 것인가요 ?? 이때 클래스마다 String, ModelAndView 등등 무엇을 return 할지 모르기 때문에 DispatcherServlet에서 자유롭게 사용할 수 없는 불편함이 있고 이것들을 공통적으로 ModelAndView로 return 하게끔 도와주는게 어댑터인가요 ?? 강의를 보며 직접 타이핑도 했는데 헷갈립니다 ㅠㅠ..
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
갑작스런 오류..;
v3까지 잘 작동되다가 v4부터 Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.라는 오류가 뜨면서 서버가 안켜집니다 ㅠ 자바11, 인텔리제이 재설치도 해보고 구글링도 다 해봤는데 고쳐지질 않아서 이전 프로젝트 실행해보니 이건 잘됐고 강의자료에 있는 프로젝트도 시도해보니 안되네요.. 어떻게 해야 고칠 수 있을까요 ㅠ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
api 예외 처리
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 좋은 강의 감사합니다 :) 제가 이해하기로는 테스트를 하기 위해서 ApiExceptionController 에서 파라미터로 받은 것 같은데요. 실무에서는 어떤 방식으로 하는지 궁금해서 질문 올렸습니다.. 예시 코드 있으시면 깃허브나 코드 복사 등 으로 답글 부탁드립니다 @RestController public class ApiExceptionController { @GetMapping("/api/{id}") public MemberDto getMember(@PathVariable("id") String id) { if (id.equals("ex")) { throw new RuntimeException("잘못된 사용자"); } if (id.equals("bad")) { throw new IllegalArgumentException("잘못된 입력 값"); } if (id.equals("user-ex")) { throw new UserException("사용자 오류"); } } } @ExceptionHandler public ResponseEntity<ErrorResult> userExHandle(UserException e) { log.error("[exceptionHandle] ex", e); ErrorResult errorResult = new ErrorResult("USER-EX", e.getMessage()); return new ResponseEntity<>(errorResult, HttpStatus.BAD_REQUEST);
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션 관련 이해한 내용이 맞는지 확인부탁드립니다
1명의 유저에게 1개 세션(저장소) & 1개 세션 Key(JSESSIONID) 할당 다수의 세션을 갖는 하나의 세션 저장소(Tomcat이 관리) 다수의 키(SessionConst.LOGIN_MEMBER etc..) & 상응하는 값(loginMember etc..) 을 갖는 하나의 세션 세션 내용이 이해가 잘 안돼서 질문글들을 정독해보고 내린 결론인데 잘 이해했는지 혹시 잘못 이해한게 있는지 확인해주시면 감사하겠습니다 추가로 이게 맞다면 이전에 만든 SessionManager와의 차이가 One Session for Multi User ( SessionManager) vs One Session for One User (HttpSession) 라고 생각했는데 괜찮을까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ModelView가 어떻게 흘러가는지와 model의 역할이 궁금합니다
Q1. 처음 new-form 에 들어오게 되면 FrontControllerServleV3에서는 Http 메세지 바디에 있는 파라미터들을 만들어서 paramMap 으로 만들고, 이것들 MemberFormControllerV3에 넘겨줄거고 여기서 "new-form"이라는 String을 가진 ModelView를 리턴받는 mv가 생기고, 이 mv.getViewName 해서 나오는 viewName은 논리이름이기 때문에 viewResolver로 상대 이름으로 바꿔주고, 이것은 MyView에 있는 render로 보내서 new-form 화면이 뜨게 되는 것인가요 ?? Q2. 그 후 MEmberListControllerV3, MemberSaveControllerV3 에서 ModelView에 있는 HashMap으로 구현 된 model에 members와 member를 넣어주는데 넣는 이유가 궁금합니다. 실제로는 memberRepository 에 저장하고, findAll를 하기때문에 사실상 MemberRepository와 ModelView에 있는 Model은 항상 같은 것 아닌가요? 맞다면 왜 굳이 2가지의 객체를 만들어서 사용하는지가 궁금합니다.
-
해결됨스프링 핵심 원리 - 기본편
컴포넌트 스캔 동작 이유
안녕하세요! 이번 강좌의 테스트는 스프링을 올려서 하는 통합 테스트가 아님에도 컴포넌트 스캔 등이 동작하였는데 이 이유가 스프링 프레임워크에 포함되는 AnnotationConfigApplicationContext를 직접 생성해줬기 때문일까요? 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
discountPolicy.discount 두번째 인자를 전달하는 사유가 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용] OrderServiceImpl.java 파일에서discountPolicy.discount 메소드의 두번째 인자값으로 물건가격(itemPrice)를 넘기는 것으로 확인했습니다. 그런데 FixDiscountPolicy 구현체에 있는 discount 메소드 에서는 price 변수값을 사용하지 않는 것으로 보이는데요, 물건가격(itemPrice)를 넘기는 이유가 무엇인가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
경로 질문드립니다.
안녕하세요. @GetMapping("/hello") public void hello(Model model){ model.addAttribute("data", "hello!"); } 웹 브라우저에서 hello 경로로 접근할 때 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버가 화면을 찾아서 처리한다고 하셨는데 return 반환값이 없는 void로 해도 접근이 가능해서요. hello 경로에 접근하면 스프링 내부에서 resources -> static -> templates 순서대로 hello.html이 있는지 확인하는게 아닌가 싶어서 질문드립니다!
-
미해결스프링 핵심 원리 - 기본편
@Primary, @Qualifier 우선순위
수업 항상 재밌게 잘 듣고 있습니다ㅎㅎ https://www.inflearn.com/questions/409588 해당 글과 같은 의문점이 들어서 선생님 말씀대로 직접 테스틀 해보았습니다. 1) rateDiscountPolicy 스프링 빈에 @Primary 를 설정하고, 2) fixDiscountPolicy 스프링 빈에 @Qualifier("subDiscountPolicy") 이렇게 설정했습니다. @Autowiredpublic OrderServiceImpl(MemberRepository memberRepository, @Qualifier("subDiscountPolicy") DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; System.out.println("discountPolicy = " + discountPolicy);} 둘 중에 뭐가 더 우선권이 높은지 확인해보기 위해 OrderServiceImpl의 생성자에서 discoutnPolicy를 출력하는 코드를 추가하고 기존에 작성한 AutoAppConfigTest 테스트 코드를 실행해봤는데, discountPolicy = hello.core.discount.FixDiscountPolicy@74a6a609 다음과 같이 2)에서 설정한 fixDiscountPolicy가 주입된 것을 확인했습니다. 1. 우선 순위부분에서 @Qualifier > @Primary 이기 때문에, 동시에 적용했을 때 다음과 같은 결과가 나오는게 맞는 건가요?? 2. 아래 글에 따르면, 메인 DB의 커넥션을 획득하는 스프링 빈은 @Primary를 지정, 서브 DB의 커넥션을 획득하는 스프링 빈은 @Qualifier를 지정한다고 하였습니다. 그런데 위에서처럼 @Primary, @Qualifier를 각 스프링 빈에 지정해 놓으면, 어떻게 때에 따라 해당 빈이 주입되도록 할 수 있나요??.. 1번의 OrderServiceImpl 생성자처럼 @Qualifier 코드를 추가해놓으면 항상 우선순위에 따라 빈에는 서브 DB 커넥션을 획득하는 스프링 빈(예제에서는 FixDiscountPolicy)가 들어가게 되지 않나요?? 3. 아래 질문의 내용처럼 직접 테스트를 해보니 @Autowired 필드명 매칭 방식 보다 @Primary 방식이 우선권이 더 높다는 것도 확인했습니다. https://www.inflearn.com/questions/129469 그러면 전체 우선권은 @Qualifier > @Primary > @Autowired 필드명 매칭 이렇게 되는 건가요??
-
미해결
강의 학습법에 대해서 질문 드리고 싶습니다.
원래 뭔가를 만들다가 필요한 부분만 찾아서 강의를 듣는 스타일이었는데,최근에 어떤 프로젝트에 참여하기 위해JPA랑 Spring을 공부해야 되는 상황입니다. 해서 영한님의 강의를 듣고 있는데요. 강의를 듣다 보니, PDF에 정리해주신 것 말고도말씀으로 정리해주시는 부분 중에 너무 중요한 내용들이 자주 나와서필기를 할 수 밖에 없더라고요 애초에 제가 필기하며 정리하는 학습법이 기억에 잘 남는다고 여기는 것도 있고.. JPA든 Spring이든 완강하기 까지 내용이 엄청나게 방대한데이거를 꼼꼼히 정리해가며 학습하면후에 프로젝트에 들어갈 때 제 기억속에 다 남아있진 않아도,적어도 빠르게 필기한 부분을 참고해서 원하는 부분을 발췌할 수 있을 것 같아서 필기를 하는 것도 있는데요. 문제는 프로젝트에 들어갈 시간이 며칠 안남았습니다!1) 짧은 시간내에 완강을 할려면 필기를 하지 않고 설렁설렁 빠르게 들어야하는데,이렇게 빠르게 대충 듣고 프로젝트를 시작하는게 좋을지 2) 3분의 1만 듣고 프로젝트를 시작하는 한이 있더라도 필기하면서 어느정도 이해하고들어가는게 좋을 지 모르겠습니다. 이런 딜레마에 빠져있구요.. 혹시나 영한님처럼 프로그래밍 학습과 프로젝트에 있어 많은 경험을 하신 분이라면,확답을 내려주실 수 있지 않을까 하여 여쭤보아요.
-
미해결스프링 핵심 원리 - 기본편
질문있습니다!
안녕하세요! 강의 너무 재밌게 잘 듣고 있습니다. 몇가지 질문이 있는데요! 1. OrderServiceImplTest의 createOrder() 가 순수한 자바로 테스트하는 코드라고 하셨는데, 정확히 그 의미가 어떤 것 인가요?? 스프링 컨테이너를 생성해서 getBean(OrderService.class) 이런식으로 받아오지 않고 new OrderServiceImpl()로 생성해서 테스트하기 때문인가요?? 2. 4분 28초쯤에 createOrder() 테스트를 실행하면 오류가 나서 선생님께서 AppConfig의 orderService()의 return을 null로 바꾸셨습니다. 저는 createOrder()에서 new orderServiceimpl() 생성자를 호출하면 OrderServiceImpl 클래스의 디폴트 생성자가 호출된다고 생각했는데, 오류가 왜 AppConfig에서 나는 건가요?? 왜 저기 코드를 고쳐야하는건지 이해가 잘 가지 않습니다ㅠㅠ
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
MessageSource를 ms로 바꾸면 Could not autowire라고 나옵니다.
제목과 같이 MessageSource 변수명을 ms로 바꾸면 빨간줄이 나오는데 어떻게 해결해야 하나요? 강의 소스를 열어도 똑같이 빨간줄이 나옵니다.ㅜㅠ @Aotuwired위에 @Qualifier("messageSource") 를 하면 되기는 하는데 왜 저는 @Qualifier을 해야 되는 걸까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderService에서 OrderItem접근
OrderService에서 OrderItem접근이 어떻게 가능한지 궁금합니다. OrderService @Transactionalpublic Long order(Long memberId, Long itemId, int count) { // memberId를 가져오기 위해선 MemberRepository있어야 함 //엔티티 조회 Member member = memberRepository.findOne(memberId); Item item = itemRepository.findOne(itemId); //배송정보 생성(회원정보 Address) Delivery delivery = new Delivery(); delivery.setAddress(member.getAddress()); //주문상품 생성 OrderItem.createOrderItem() // [질문한 부분]} 혹시 어떠한 도메인 이든 , Controller, Service, Repository에 접근 가능해서 그런걸까요?!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
파라미터 ...
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Order에 생성 메서드를 구현할때 파라미터에 ... 넣는 의미를 모르겠습니다. 어느 경우에 사용하나요? public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems) { }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Mysql 인메모리DB 설정, 로그 쿼리남기기
안녕하세요, 저는 처음부터 H2데이터베이스가 아닌 MySQL을 연결해서 사용하고 있습니다. 테스트 코드 작성 후 여러 이점으로 메모리디비 연결 하는 방법을 알려주셨는데, Mysql의 경우도 할 수 있나요? 현재 dependencies에 implementation 'mysql:mysql-connector-java' 추가된 상태입니다. 추가적으로 로그에 쿼리남기는 것도 보고싶어서, dependencies에 implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' 만을 추가한 상태입니다. 로그에 남는것 같기는 한데 선생님처럼 예쁘게 보이는 것이아닌 줄글처럼 나오는데요, 혹시 추가하거나 봐야할 게 있을까요? application.properties에는 이렇게 설정했습니다, # JPA Settingsspring.jpa.hibernate.ddl-auto=createspring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.show_sql=true