inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

@Query 사용 시 연관테이블은 order by 가 불가한가요?

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

@Query("SELECT t From Team t join Fetch t.member m ORDER BY m.name desc") 예를 들어 이런 식으로 Fetch join을 이용해서 연관테이블 리스트를 가져올 때에 정렬해서 가져오고 싶습니다. 검색 등을 통해 해결해보려 했지만 방법을 모르겠네요 ㅠㅠ 만약 @Query가 안된다면 다른 방식으로 가져오는 방법이 있을까요?

  • java
  • spring
  • spring-boot
  • jpa
이영훈 댓글 1 좋아요 0 조회수 240

버전 질문입니다.

미해결

스프링과 JPA 기반 웹 애플리케이션 개발

자바버전이나 jdk,인텔리제이 버전, 스프링 부트 버전을 전부다 강사님께 맞춰야하나요? 인텔리제이 얼티메이트 2023.3 버전을 쓰고있습니다.

  • java
  • spring
  • spring-boot
  • jpa
  • thymeleaf
supersounds 댓글 1 좋아요 0 조회수 322

섹션 4. 회원 도메인 개발-회원서비스 개발에 대해 질문있습니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

섹션 4. 회원 도메인 개발-회원서비스 개발에 대해 질문있습니다. 테스트 junit으로 테스트 실행시 아래와 같은 에러가 나옵니다. Execution failed for task ':test'. > No tests found for given includes: [jpabook.jpashop.Service.MemberServiceTest](filter.includeTestsMatching) package jpabook.jpashop.Service; import static org.junit.Assert.*; import jpabook.jpashop.domains.Member; import jpabook.jpashop.repository.MemberRepository; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; //메모리db로 test import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.assertEquals; @RunWith(SpringRunner.class) @SpringBootTest @Transactional class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입() throws Exception { //given Member member = new Member(); member.setName("kim"); //when Long savedId = memberService.join(member); //then assertEquals(member, memberRepository.findOne(savedId)); } // @Test // public void 중복회원예외() throws Exception { // //given // // //when // // //then // // } } 에러 사항을 찾아보니 디렉토리 위치가 다를 경우에 에러가 날 수 있다고 하여 디렉토리 위치를 비교해봐도 같습니다. junit테스트도 동일합니다. 어느 부분이 틀린지 알 수 있을까요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
zzzzz 댓글 1 좋아요 0 조회수 245

BeanPropertySqlParameter 사용 시 질문있습니다.

해결됨

스프링 DB 2편 - 데이터 접근 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] Item 클래스에 getId()도 있는데 BeanPropertySqlParameterSouce(item)을 사용하면 id값도 만들어지나요??

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
eoyeong 댓글 1 좋아요 0 조회수 221

CascadeType 자식 엔티티 삭제

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tr = em.getTransaction(); tr.begin(); try{ Parent parent = new Parent(); Child child = new Child(); Child child1 = new Child(); parent.addChild(child); parent.addChild(child1); em.persist(parent); em.flush(); em.clear(); Parent newParent = em.find(Parent.class, parent.getId()); Child child2 = newParent.getChildList().get(0); em.remove(child2); tr.commit(); } catch (Exception e){ tr.rollback(); e.printStackTrace(); } finally { em.close(); } emf.close(); } } 안녕하세요 CascadeType 관련해서 질문을 남깁니다. Parent에 CascadeType을 ALL 또는 PERSIST로 했을 때 위에서 child 삭제 쿼리가 나가지 않습니다. 다른 속성들은 모두 잘 동작을 하는데 왜 저 두 속성만 안되는건지 혹시 알 수 있을까요?

  • java
  • jpa
.. 댓글 1 좋아요 0 조회수 195

Fixture 클렌징 관련 질문드립니다.

해결됨

Practical Testing: 실용적인 테스트 가이드

안녕하세요! 저는 강사님이 말씀해주신 방법들이 아닌 @Sql 어노테이션을 사용해서 모든 테이블을 Truncate하는 방법으로 클렌징을 하고 있었습니다. Truncate는 복구가 안되지만 성능 면에서 Delete보다 빠른 것으로 알고 있는데 제가 사용한 방식도 괜찮은 방법일지, 혹은 발생할만한 문제가 있을지 궁금합니다. teardown.sql -- 모든 제약 조건 비활성화 SET REFERENTIAL_INTEGRITY FALSE; truncate table user_tb; truncate table oauth_tb; truncate table vote_tb; truncate table choice_tb; truncate table vote_item_tb; truncate table place_tb; truncate table review_tb; truncate table review_vibe_tb; truncate table vibe_tb; truncate table place_vibe_tb; truncate table place_food_tb; truncate table food_tb; truncate table participant_tb; -- 모든 제약 조건 활성화 SET REFERENTIAL_INTEGRITY TRUE;

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
제리 댓글 2 좋아요 0 조회수 316

섹션10 언제 나오나요?

미해결

호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)

대략적인 일정이라도 궁금합니다

  • vue.js
  • aws
  • spring-boot
  • jpa
  • spring-security
고트. 댓글 1 좋아요 0 조회수 504

KafkaListener DB에서 update 나 delete 이벤트 감지하는방법있을까요?

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

카프라 활용 1~2를 보면서 궁금한 점이 생겼는데 DB서 insert 가 발생했을 때는 @KafkaListener 를 통해 생성된 데이터를 받을 수 있는데 update나 delete 가 발생했을 때는 @KafkaListener로 받을 수 없더라고요? DB에서 update또는 delete문이 발생했을 때의 이벤트도 받으려면 어떻게 해야할까요?

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
  • rabbitmq
백엔드 주니어 개발자 댓글 2 좋아요 1 조회수 529

엔티티 설계시 주의점 질문입니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

1. 엔티티 설계시 주의점 10분6초에서 fetch=FetchType.LAZY 을 fetch=LAZY 로 변경하시는데요. 강의 아래화면에서 방향을 보니까 alt +endter를 누르시는데 저는 오른쪽 화면 처럼 나옵니다. 어떻게 해야하나요? 24분 40초에 나오는 setMember(Member member) 부분 코드 설명이 아래처럼 이해해도 되나요? public void setMember(Member member){ // 현재 Order 객체의 member 필드에 매개변수로 받은 Member 객체를 할당합니다. this.member = member; // Member 객체의 getOrders 메서드를 호출해 주문 목록을 가져온 뒤, 현재 Order 객체(this)를 그 목록에 추가합니다. // 이는 Member 객체 내부의 주문 목록에도 현재 Order 객체가 포함되도록 하는 역방향 연결을 설정합니다. member.getOrders().add(this); } 3.getOrders()는 메소드로 정의된게 없는데 왜 빨간줄이 안뜨나요? 강의에서 setter 기능은 쓰지 말라고 하셨는데 setMember와 setter 는 다른 기능인가요? setMember 이 부분을 쓰는 이유가 아래 동그라미 표시가 있기 때문인가요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
zzzzz 댓글 1 좋아요 0 조회수 210

어떤 경우 cascade 를 적용해도 되는지 이해가 되지 않습니다.

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예 [질문 내용] 스프링 cascade 활용도 측면에서 궁금한 것이 있습니다. 영한님 - 인프런 (inflearn.com) 이 질문을 남겼었던 수강생입니다! 잠깐 상황을 요약하면 Program 과 Review 그리고 User 가 다대 1 1대 다 로 묶여 있는 상황입니다. program 에서 program.addReview 메서드를 활용하기 위해 cascade type 을 적용하였었습니다. 하지만 영한 님은 이부분의 코드는 별로 좋은 코드가 아니다! cascade 옵션 질문 - 인프런 (inflearn.com) 를 참고해서 보아라. 라고 하셨습니다. 위 질문의 요약은 강의에서 Order 는 OrderItem 을 개인 소유 하나, Order 와 Delivery 는 Delivery 가 여러 곳에서 참조할 수 있으므로 개인 소유 하지 않는다. 라고 읽었습니다. 참조 하는 것과 Cascade Type .all 이 무슨 관계가 있는지 모르겠습니다. 6줄요약하면: Delivery 와 Review 는 여러 곳에서 참조할 수 있으므로 CascadeType all 을 붙이지 말라고 하신 것 같은데 여러 곳에서 참조가능성이 있으면 CascadeType all 을 왜 붙이지 말아야 하는지 궁금합니다. 단순히 계속 코드를 보며 추적해야 하는 것 때문인가요?? 이 부분이 와닿지 않습니다. 혹시 실제 예를 들어 설명해주실수 있나요??

  • java
  • jpa
dionisos198 댓글 2 좋아요 0 조회수 468

엔티티 설계시 주의점 질문있습니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

엔티티 설계시 주의점 8분 39초에서요. 사용하지 말라는게 위 사진에서 빨간색 박스를 의미하시는건지 노란색 박스를 의미하시는 건지 궁금합니다. onetonoe와 ManyToOne OneToMany 셋다 사용하지 말라는 건가요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
zzzzz 댓글 1 좋아요 0 조회수 178

H2 테이블 미생성 및 임베디드 모드 실행되는 이유

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

[질문 내용] 안녕하세요 현재 H2 테이블을 이 생성되지 않고 있습니다. 관련 질문들을 찾아봐서 update에서 create로 바꿔봐도 안되고 있느데 문제를 모르겠습니다. SprongBoot Applicaton에 @EnitityScan을 하여도 생성아 안되고 있습니다. spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: show_sql: true format_sql: true logging.level: org.hibernate.SQL: debug org.hibernate.type: trace 이렇게 DB도 생성이 되었고 커넥션도 문제가 없습니다. @SpringBootApplication @EntityScan(basePackages = "jpabook.jpashop.domain") public class JpashopApplication { public static void main(String[] args) { SpringApplication.run(JpashopApplication.class, args); } } 위에서 말한 것처럼 EnitityScan을 하였는데도 테이블이 생성이 안되어서 진행을 못하고 있습니다. 문제가 어디에 있는것 일까요? 파일 디렉토리 구조는 다음과 같습니다. 추신: 현재 로그를 보니 H2가 임베디드로 실행되는거같은데 Gradle에도 runtimeOnly라고 잘 적어놨습니다. 이유를 도저히 모르겠습니다. 2024-03-12T20:56:51.434+09:00 INFO 5352 --- [ restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:6f48c70e-23df-4595-9e73-2ad1be4993e1' 아래는 제 Gradle 코드입니다. plugins { id 'java' id 'org.springframework.boot' version '3.2.3' id 'io.spring.dependency-management' version '1.1.4' } group = 'jpashop' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } 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 '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" } implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' } test { useJUnitPlatform() } 도움을 주신 다면 감사하겠습니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
이규훈 댓글 1 좋아요 1 조회수 343

깊은 연쇄 호출에 대한 성능 문제 질문입니다.

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

엔티티가 member, A,B,C 가 있습니다. 엔티티 사이의 연관관계는 member, A : 일대다 양뱡향 A,B : 일대다 양뱡향 B,C : 일대다 양방향 관계입니다. 이때 C 에 대한 조회를 하는데 있어서 memberId 도 같이 응답을 해줘야합니다. 이런 경우 어떻게 처리하는게 좋을지에 대한 질문이 생겼습니다. memberId = C.getB().getA().getMember().getId() 이렇게 계속 호출을 해서 가져오는 방법은 성능상 안좋을 것 같아 실무에서는 어떻게 하시는지 궁금합니다. 애초에 DB 설계가 안좋은건가요?

  • java
  • spring
  • spring-boot
  • jpa
opix0306 댓글 1 좋아요 0 조회수 206

섹션 3 | 수정/삭제 처리 부분 질문

해결됨

코드로 배우는 React 19 with 스프링부트 API서버

delete, modify 버튼 클릭 시 오류가 생기는데 선생님 자료에서 ModifyComponent.js ModifyPage.js ResultModal.js 복사해서 사용해도 오류가 생깁니다 cmd에는 오류가 잡히지 않고 콘솔창에서만 오류가 있다고 뜹니다

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
양현빈 댓글 1 좋아요 0 조회수 301

JUnit4 종속성을 추가했음에도 불구하고 테스트 진행 시 JUnit5로 실행됩니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation("org.junit.vintage:junit-vintage-engine") { exclude group: "org.hamcrest", module: "hamcrest-core" } 강의 자료에서 나온 대로 JUnit4로 테스트 진행하기 위해서 위와 같이 종속성 추가했음에도 불구하고 테스트를 진행하면 JUnit5로 실행이 됩니다. 이유가 뭔가요??

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
todrkrwndgg 댓글 2 좋아요 0 조회수 468

강의 내 커리큘럼 엑셀로 받아볼 수 있나요

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

복습용으로 강의 내 커리큘럼 리스트를 받아보려고 하는데 일일이 수작업으로 하려고 하니 좀 번거로워서 문의드립니다. 혹시 커리큘럼을 export 할 수 있는 기능이 있나요?

  • java
  • jpa
Jaesang Yoon 댓글 1 좋아요 0 조회수 242

강의에서 테스트 코드에서 insert 쿼리문이 발생합니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. JUnit5 로 진행하고 강의에서 내용 그대로 작성을 하였는데, insert 쿼리문이 발생했습니다.. 8:54 초 내용에서 @Transactional 어노테이션을 붙이면 자동으로 롤백해버리기 때문에 DB에 insert를 날릴 이유가 없다고 하셧는데.. 왜이러는걸까요..ㅠㅠ h2 데이터베이스를 사용한 것이 아닌 mysql 데이터베이스를 연결하였지만 그거 말고 다른 설정들은 다 동일하거든요

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
Gloz0315 댓글 1 좋아요 0 조회수 333

findById 동시성 테스트 실패

해결됨

실전! 스프링 데이터 JPA

MemberRepository는 jpaRepository인 상태이고, findById관련해서 동시성 테스트를 하고 있는데, 해당 테스트가 통과를 하지 않아 그 이유가 궁금합니다. 단순하게 여러 스레드에서 findById하는 테스트 코드인데 왜 통과를 못하는지 잘 이해가 가지 않습니다. @SpringBootTest @Transactional public class Test{ @Autowired MemberRepository memberRepository; Member member; @BeforeEach void setUp() { member = Member.builder().name("testMember").build(); memberRepository.save(member); } @Test public void test() throws Exception { int threadCount = 10; ExecutorService executorService = Executors.newFixedThreadPool(threadCount); CountDownLatch latch = new CountDownLatch(threadCount); AtomicInteger failCount = new AtomicInteger(); AtomicInteger successCount = new AtomicInteger(); for (int i = 0; i < threadCount; i++) { executorService.submit( () -> { try { memberRepository.findById(member.getId()).get(); successCount.addAndGet(1); } catch (Exception e) { System.out.println(e.getMessage()); failCount.addAndGet(1); }finally { latch.countDown(); } } ); } latch.await(); assertThat(successCount.get()).isEqualTo(threadCount); assertThat(failCount.get()).isEqualTo(0); } }

  • java
  • spring
  • spring-boot
  • jpa
임동현 댓글 1 좋아요 0 조회수 491

트랜잭션 락 질문

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

jpa 트랜잭션 락 기능중에 낙관적 락과 비관적 락이 있는데 실제로 이 락을 실무에서도 많이 사용하는지 궁금합니다. 인터넷 예시로 게시글 조회수 카운트나 좋아요 카운트 관리 할 때 많이 사용한다고 하는데 조회수나 좋아요 카운트는 카운트가 실시간으로 정확히 맞을 필요는 없는데 굳이 락을 이용해서 관리를 해야만 하는지 의문점이 들기도 합니다. 실제로 실무에서 많이 사용한다면, 좀 더 실무에 와 닿을 수 있는 케이스를 알려주시면 감사하겠습니다.

  • java
  • spring
  • spring-boot
  • jpa
by.kim 댓글 2 좋아요 0 조회수 417

상품 수정이 안되네요.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 상품 수정하기 버튼누르면 아래와 같이 에러페이지로 연결됩니다. 아이템컨트롤러는 아래와 같고 updateItemForm.html의 경로는 (\jpashop\src\main\resources\templates\items\updateItemForm.html)인데 왜 안되는걸까요? package jpabook.jpashop.controller; import jpabook.jpashop.domain.item.Book; import jpabook.jpashop.domain.item.Item; import jpabook.jpashop.service.ItemService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import java.util.List; @Controller @RequiredArgsConstructor public class ItemController { private final ItemService itemService; @GetMapping("/items/new") public String createForm(Model model) { model.addAttribute("form", new BookForm()); return "items/createItemForm"; } @PostMapping("/items/new") public String create(BookForm form) { Book book = new Book(); book.setName(form.getName()); book.setPrice(form.getPrice()); book.setStockQuantity(form.getStockQuantity()); book.setAuthor(form.getAuthor()); book.setIsbn(form.getIsbn()); itemService.saveItem(book); return "redirect:/"; } @GetMapping("/items") public String list(Model model) { List<Item> items = itemService.findItems(); model.addAttribute("items", items); return "items/itemList"; } @GetMapping("/items/{itemId}/edit") public String updateItemForm(@PathVariable("itemId") Long itemId, Model model) { Book item = (Book) itemService.findOne(itemId); BookForm form = new BookForm(); form.setId(item.getId()); form.setName(item.getName()); form.setPrice(item.getPrice()); form.setStockQuantity(item.getStockQuantity()); form.setAuthor(item.getAuthor()); form.setIsbn(item.getIsbn()); model.addAttribute("form", form); return "items/updateItemForm"; } @PostMapping("/items/{itemId}/edit") public String updateItem(@PathVariable Long itemId, @ModelAttribute("form") BookForm form) { itemService.updateItem(itemId, form.getName(), form.getPrice(), form.getStockQuantity()); return "redirect:/items"; } }

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
오진희 댓글 1 좋아요 0 조회수 433

인기 태그

인프런 TOP Writers

주간 인기글