묻고 답해요
163만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
BeanPropertySqlParameter 사용 시 질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Item 클래스에 getId()도 있는데BeanPropertySqlParameterSouce(item)을 사용하면id값도 만들어지나요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
CascadeType 자식 엔티티 삭제
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 삭제 쿼리가 나가지 않습니다. 다른 속성들은 모두 잘 동작을 하는데 왜 저 두 속성만 안되는건지 혹시 알 수 있을까요?
-
해결됨Practical Testing: 실용적인 테스트 가이드
Fixture 클렌징 관련 질문드립니다.
안녕하세요! 저는 강사님이 말씀해주신 방법들이 아닌 @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;
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
섹션10 언제 나오나요?
대략적인 일정이라도 궁금합니다
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
KafkaListener DB에서 update 나 delete 이벤트 감지하는방법있을까요?
카프라 활용 1~2를 보면서 궁금한 점이 생겼는데DB서 insert 가 발생했을 때는 @KafkaListener 를 통해 생성된 데이터를 받을 수 있는데 update나 delete 가 발생했을 때는 @KafkaListener로 받을 수 없더라고요?DB에서 update또는 delete문이 발생했을 때의 이벤트도 받으려면 어떻게 해야할까요?
-
미해결실전! 스프링 부트와 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 이 부분을 쓰는 이유가 아래 동그라미 표시가 있기 때문인가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
어떤 경우 cascade 를 적용해도 되는지 이해가 되지 않습니다.
[질문 템플릿]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 을 왜 붙이지 말아야 하는지 궁금합니다. 단순히 계속 코드를 보며 추적해야 하는 것 때문인가요?? 이 부분이 와닿지 않습니다. 혹시 실제 예를 들어 설명해주실수 있나요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 설계시 주의점 질문있습니다.
엔티티 설계시 주의점 8분 39초에서요.사용하지 말라는게 위 사진에서 빨간색 박스를 의미하시는건지 노란색 박스를 의미하시는 건지 궁금합니다.onetonoe와 ManyToOne OneToMany 셋다 사용하지 말라는 건가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
H2 테이블 미생성 및 임베디드 모드 실행되는 이유
[질문 내용]안녕하세요 현재 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() }도움을 주신 다면 감사하겠습니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
깊은 연쇄 호출에 대한 성능 문제 질문입니다.
엔티티가 member, A,B,C 가 있습니다.엔티티 사이의 연관관계는 member, A : 일대다 양뱡향A,B : 일대다 양뱡향B,C : 일대다 양방향 관계입니다.이때 C 에 대한 조회를 하는데 있어서 memberId 도 같이 응답을 해줘야합니다.이런 경우 어떻게 처리하는게 좋을지에 대한 질문이 생겼습니다.memberId = C.getB().getA().getMember().getId() 이렇게 계속 호출을 해서 가져오는 방법은 성능상 안좋을 것 같아 실무에서는 어떻게 하시는지 궁금합니다.애초에 DB 설계가 안좋은건가요?
-
해결됨코드로 배우는 React 19 with 스프링부트 API서버
섹션 3 | 수정/삭제 처리 부분 질문
delete, modify 버튼 클릭 시오류가 생기는데 선생님 자료에서ModifyComponent.jsModifyPage.jsResultModal.js 복사해서 사용해도 오류가 생깁니다cmd에는 오류가 잡히지 않고 콘솔창에서만 오류가 있다고 뜹니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JUnit4 종속성을 추가했음에도 불구하고 테스트 진행 시 JUnit5로 실행됩니다.
=========================================[질문 템플릿]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로 실행이 됩니다. 이유가 뭔가요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
강의 내 커리큘럼 엑셀로 받아볼 수 있나요
복습용으로 강의 내 커리큘럼 리스트를 받아보려고 하는데 일일이 수작업으로 하려고 하니 좀 번거로워서 문의드립니다. 혹시 커리큘럼을 export 할 수 있는 기능이 있나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의에서 테스트 코드에서 insert 쿼리문이 발생합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.JUnit5 로 진행하고 강의에서 내용 그대로 작성을 하였는데, insert 쿼리문이 발생했습니다..8:54 초 내용에서 @Transactional 어노테이션을 붙이면 자동으로 롤백해버리기 때문에 DB에 insert를 날릴 이유가 없다고 하셧는데.. 왜이러는걸까요..ㅠㅠ h2 데이터베이스를 사용한 것이 아닌 mysql 데이터베이스를 연결하였지만 그거 말고 다른 설정들은 다 동일하거든요
-
해결됨실전! 스프링 데이터 JPA
findById 동시성 테스트 실패
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); } }
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
트랜잭션 락 질문
jpa 트랜잭션 락 기능중에 낙관적 락과 비관적 락이 있는데실제로 이 락을 실무에서도 많이 사용하는지 궁금합니다.인터넷 예시로 게시글 조회수 카운트나 좋아요 카운트 관리 할 때 많이 사용한다고 하는데조회수나 좋아요 카운트는 카운트가 실시간으로 정확히 맞을 필요는 없는데 굳이 락을 이용해서 관리를 해야만 하는지 의문점이 들기도 합니다.실제로 실무에서 많이 사용한다면, 좀 더 실무에 와 닿을 수 있는 케이스를 알려주시면 감사하겠습니다.
-
미해결실전! 스프링 부트와 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"; } }
-
해결됨실전! Querydsl
3.2버전 gradle 설정에 대한 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.이게 현재 프로젝트 이고plugins { id 'java' id 'org.springframework.boot' version '3.2.3' id 'io.spring.dependency-management' version '1.1.4' id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' } group = 'study' 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-web' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'com.mysql:mysql-connector-j' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' //test 롬복 사용 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.1.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:5.1.0:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') } //querydsl 추가 시작 def querydslDir = file('build/generated/querydsl') querydsl { jpa = true querydslSourcesDir = querydslDir } sourceSets { main.java.srcDir querydslDir } configurations { querydsl.extendsFrom compileClasspath } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl } 현재 gradle설정인데 Querydsl 설정과 검증 부분에서 막혔어요클린해서 q파일 지우고 테스트 코드 런하면 아래 에러가 나타나고error: Attempt to recreate a file for type study.querydsl.entity.QHello 이후에 q파일이 생성 된 후에는 error: Could not find class file for 'study.querydsl.entity.Hello'. 에러가 반복되네요.. https://www.inflearn.com/questions/1086099 다른분들 설정파일 따라해도 안됩니다..
-
미해결실전! Querydsl
alias를 사용한 QClass 생성 관련 질문입니다.
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] @Test void QClassAliasTest() { List<Team> result1 = commonQuery().where(builderByMemberName1()).fetch(); List<Team> result2 = commonQuery().where(builderByMemberName2()).fetch(); } private JPAQuery<Team> commonQuery() { QMember member = new QMember("member"); QTeam team = QTeam.team; return query.selectFrom(team).leftJoin(team.members, member).fetchJoin(); } private BooleanExpression builderByMemberName1() { QMember member = new QMember("member"); return member.username.eq("1"); } private BooleanExpression builderByMemberName2() { QMember member = new QMember("memberTest"); return member.username.eq("1"); } 위의 코드를 실행했을 때builderByMemberName2()를 사용한 경우는 [Could not interpret path expression 'memberTest.username'] 예외가 발생하는데commonQuery의 member와 builderByMemberName1의 member는 hashCode까지 동일해서 코드가 문제없이 실행되더라구요. 출력된 sql문도 하나의 테이블을 잘 사용하고 있구요.alias를 동일하게 주면 new 키워드를 사용하더라도 새로운 객체가 생성되는 게 아니라 기존에 있던, alias가 동일한 객체를 사용하게 되는 건가요?
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
@Transactional 질문이 있습니다.
강의 중 트랜잭션 관련 부분을 보다 @Transactional과 직접 트랜잭션을 사용하는 예제를 떠올려 생각중인데 제가 생각한것이 맞는지 궁금하여 질문드립니다. @Transactional이 적용된 A클래스의 메서드에서@Transactional이 적용되지 않은 B클래스의 메서드를 호출하고B클래스 메서드의 내부는 직접 트랜잭션 매니져로 트랜잭션을 생성하고 롤백하는 로직이 포함되어 있는 상황이 있다고 가정한다면 트랜잭션 처리 순서는A클래스에서 트랜잭션이 시작되고 B클래스는 @Transactional이 없어서 트랜잭션AOP 프록시가 생성되지 않는것과는 상관없이 트랜잭션 매니져로 직접 생성한 트랜잭션으로 인해 A클래스의 트랜잭션에 합류하게 되어 B클래스의 롤백으로 인해 결과는 모두 롤백되는게 맞는걸까요?