묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
orElseThrow에 관해서
안녕하세요 강의 11:15초에 있는 예외 던지는 것에 대해서 질문이 있습니다.orElseThrow로 테이블에 데이터 없는 경우 예외가 터진다고 하셨는데 예외처리는 따로 안 해도 되는 건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
연관관계 매핑 사용 질문(feat. 외래 키)
안녕하세요 JPA ORM 프로그래밍 수강하고 있는 수강생입니다! 다름이 아니라 연관관계 매핑에 대해서 해당 강의에서 다루고 있는데, 실무에서는 수작업으로 데이터를 다루는(수정, 생성) 경우가 빈번하여, 실제로는 외래 키를 지양한다고 들었습니다. 그런데, 해당 강의에서 다루는 연관관계 매핑을 사용하면 자동으로 외래 키가 생성이 되는데(사실 ddl - auto를 사용해서 정확하진 않습니다만..) 그러면 실무에서도 연관관계 매핑은 지양하는 것일까요?그렇다면 연관관계 매핑은 단순히 객체지향을 위한 방법이기 때문에 존재하는 것인지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
질문
강의 내용 중 엔티티에 비즈니스 로직을 포함시키셨는데 여러 사이트를 보면서 내용을 이해하려고 노력하면서 최종적으로 이런 결론을 지었습니다. Q. 어떤 비즈니스 로직을 서비스 계층에서 구현해야 하고 어떤 비즈니스 로직을 도메인에서 구현하는 것이 맞을까?A. 상품과 관련된 비즈니스 로직(주문 접수에 따른 재고 감소, 주문 취소에 따른 재고 증가)에서는 하나의 도메인만 활용이 되므로 하나의 도메인만으로 비즈니스 로직을 구현할 수 있다고 판단되는 상황이라면 도메인에 비즈니스 로직을 구현해도 괜찮지만 여러 도메인을 활용해야하는 복잡한 비즈니스 로직을 구현하거나 회원가입이나 로그인과 같이 리포지토리와 직접적 관련을 맺고 있는 비즈니스 로직의 경우라면 서비스 계층에서 구현하는 것이 맞다.질문에 대한 대답이 이게 맞는지 궁금합니다.
-
미해결실전! Querydsl
AliasCollisionException 오류가 나는데 ㅠㅠ
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.return queryFactory.select(board) .from(board) .distinct() .leftJoin(board.writer, member) .fetchJoin() .leftJoin(board.comments, comment) .fetchJoin() .leftJoin(comment.writer, member) .fetchJoin() .where(board.id.eq(id)) .fetchOne();이런 식으로 join을 세번해서 날리니까 org.hibernate.query.sqm.AliasCollisionException: Duplicate identification variable 'member1' in 'from' clause [join writer as member1 join writer as member1] 오류가 나는데 혹시 원인을 알 수 있을까요
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
maven으로 프로젝트 생성 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.강의에서는 프로젝트 파일 생성하는데 maven들어가면 next 누르고 groupid 등이 나오는데 저는 사진 속 화면이 전부인데 왜그런건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Member.find 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.Member member = em.find(Member.class, o: 150L); 이라고 되는데 영상에서는Member member = em.find(Member.class, primary key: 150L); 라고 뜨던데 상관없나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 비즈니스 로직 vs 서비스 비즈니스 로직
강의에서 DDD의 개념을 적용하시면서 엔티티에 비즈니스 로직을 넣으셨었는데요.아직까진 DDD에 대한 개념이 완벽히 정립되지 않아 별도의 자료로 공부를 하고 있습니다.공부하는 차원에서 서비스 계층에서의 비즈니스 로직 개발로 코드 리팩토링을 스스로 해보고 강의에 나오지 않았던 상품 서비스 테스트 코드 작성 결과 일단 통과가 나오긴 했습니다만... 잘 한 것인지 몰라서 코드 평가를 좀 받아보고 싶어 질문을 올리게 되었습니다.테스트 코드 역시 각 계층별로 지켜야 하는 테스트 코드 원칙이 있으나 이 부분도 같이 공부하느라 제대로 적용해보기 아직 어려운 단계라 @SpringBootTest를 사용했습니다. 이 부분은 감안해주세요..! 또 다른 추가 질문이 있습니다. 강의에서 엔티티에 구현한 비즈니스 로직을 서비스 계층에 비즈니스 로직을 개발하는 방식으로 바꾸는 과정에서 엔티티를 직접 이용하는 것보다는 DTO를 만들어서 전달하는게 엔티티에 많은 변화를 가하지않는 유일한 방법일까요?ItemService 코드package spring.project.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import spring.project.domain.Item; import spring.project.exception.NotEnoughStockException; import spring.project.repository.ItemRepository; import java.util.List; @Service @Transactional(readOnly = true) public class ItemService { private final ItemRepository itemRepository; @Autowired public ItemService(ItemRepository itemRepository) { this.itemRepository = itemRepository; } @Transactional public Long saveItem(Item item, int quantity) { addStock(item, quantity); itemRepository.save(item); return item.getId(); } private void addStock(Item item, int quantity) { item.setStockQuantity(item.getStockQuantity() + quantity); itemRepository.save(item); } @Transactional public void removeStock(Item item, int quantity) { int restStock = item.getStockQuantity() - quantity; if (restStock < 0) { throw new NotEnoughStockException("재고가 부족합니다."); } item.setStockQuantity(restStock); itemRepository.save(item); } public Item findOne(Long itemId) { return itemRepository.findOne(itemId); } public List<Item> findAll() { return itemRepository.findAll(); } }ItemServiceTest 코드package spring.project.service; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import spring.project.domain.Album; import spring.project.domain.Book; import spring.project.domain.Item; import spring.project.repository.ItemRepository; @SpringBootTest class ItemServiceTest { @Autowired private ItemRepository itemRepository; @Autowired private ItemService itemService; @Test @DisplayName("상품 저장 시 상품 저장과 동시에 재고 수량이 증가해야 한다.") void save() { // given Book book = new Book(); book.setAuthor("홍길동"); // when Long id = itemService.saveItem(book, 3); // then Item item = itemRepository.findOne(id); Assertions.assertThat(item.getName()).isEqualTo(book.getName()); Assertions.assertThat(item.getStockQuantity()).isEqualTo(3); } @Test @DisplayName("상품 주문이 들어가면 재고 수량에서 주문 수량만큼 차감이 되어야 한다.") void remove() { // given Album album = new Album(); album.setName("영원"); Long id = itemService.saveItem(album, 100); // when itemService.removeStock(album, 4); // then Item item = itemRepository.findOne(id); Assertions.assertThat(item.getStockQuantity()).isEqualTo(96); } }
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
여기서부터 제 한계인 것 같습니다 제발 도와주세요
윈도우 사용자입니다. kafka-connect 설치 부분이 너무너무 어려워요 ㅠㅠ목표는 kafka,zookeeper -> Docker 컨테이너로 관리 Kafka-Connect, JDBC connector 어떻게든 되기만 해보기,MySQL-jdbc connector 사용하기 입니다. 실제 사용할 때는 docker 를 이용하여 zookeeper 와 kafka 를 사용할 계획이라서 docker 를 사용 , zookeeper 와 kafka를 컨테이너로 관리할 계획입니다. 하지만 kafka-connect 부분 부터 JDBC 관련 부분까지 4~5일 동안 고생하고 있습니다. 시도했던 방법 1. -> 강의 내용 대로 해보기 저는 curl 명령어가 안되어서 curl.exe 로 진행해봤습니다. 강의에서 처럼 tar 명령어로 압축해제 할 떄 해제 중 아래와 같은 에러가 항상 발생하였습니다. 그래서 그냥 윈도우 마우스 우클릭으로 해제하면 가 발생하고 이 에러는 찾아도 안 나오더라고요그냥 무시하고 진행하면 (건너 뛰기 ) 누르면 이런 에러가 발생하고 https://www.inflearn.com/questions/229060/%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94-connector-%EC%8B%A4%ED%96%89%EC%8B%9C-%EC%98%A4%EB%A5%98%EA%B0%80-%EC%83%9D%EA%B2%A8-%EC%A7%88%EB%AC%B8-%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4이 게시글의 답변을 참고하여도 여전히 변함없는 것을 확인한 이후에 도저히 설치는 못하겠다. 라고 생각해서 컨테이너로 올릴 수 있는 방법을 찾아보았습니다. 시도했던 방법 2->https://velog.io/@ililil9482/kafka-db-%EC%97%B0%EB%8F%99-feat.-mysql이 방식이 제가 생각한 워너비라서 그대로 따라 해도 오류가 발생합니다.Volume 설정이 제대로 안되는지 블로그 그대로 관리하고 해도 실제 jar 파일이 들어가지 않더라고요!이외에도 정말 많은 방법을 시도했는데 번번히 실패하거나저랑 실행 환경이 달라서 포기하였습니다.검색도 많이하고 많이 읽어봤습니다. 이제는 진짜 죄송한데 혼자 해낼 자신이 없어요ㅠㅠ윈도우 환경에서 kafka , zookeeper 컨테이너 관리 My-Sql jdbc connector 사용하기 Kafka-Connect, JDBC connector 어떻게든 되기만 해보기이게 진짜 너무너무 하고 싶은데 방법이 없을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
연관 관계 저장 시 궁금한 점.
영한님 안녕하세요. 강의를 잘 듣고 있습니다!학습 중 궁금한 점이 있어 질문 드립니다.엔티티를 저장할 때에는 연관된 엔티티가 모두 영속 상태여야 한다고 알고 있습니다. 다음 코드에서 현재 user와 연관된 teamB는 영속 상태가 아닙니다. 따라서 실행 시 에러가 발생할 것으로 예상했습니다. 그러나 에러 없이 잘 동작하였고, DB를 확인해 보니 user의 team이 현재 연관된 teamB가 아니라 teamA로 되어 있었습니다.@Entity @Table(name="users") public class User { @Id @GeneratedValue @Column(name="user_id") private Long id; private String username; @ManyToOne @JoinColumn(name="team_id") private Team team; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Team getTeam() { return team; } public void setTeam(Team team) { this.team = team; } }@Entity public class Team { @Id @GeneratedValue @Column(name="team_id") private Long id; private String teamName; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTeamName() { return teamName; } public void setTeamName(String teamName) { this.teamName = teamName; } }public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try{ Team teamA = new Team(); teamA.setTeamName("teamA"); System.out.println(" =====[1]===== "); System.out.println("teamA = " + teamA); System.out.println("teamA.getId() = " + teamA.getId()); System.out.println("teamA.getTeamName() = " + teamA.getTeamName()); System.out.println(" 영속? = " + em.contains(teamA)); System.out.println(" ============= "); System.out.println(); em.persist(teamA); System.out.println(" =====[2]===== "); System.out.println("teamA = " + teamA); System.out.println("teamA.getId() = " + teamA.getId()); System.out.println("teamA.getTeamName() = " + teamA.getTeamName()); System.out.println(" 영속? = " + em.contains(teamA)); System.out.println(" ============= "); System.out.println(); Team findMyTeam = em.find(Team.class, teamA.getId()); System.out.println(" =====[3]===== "); System.out.println("findMyTeam = " + findMyTeam); System.out.println("findMyTeam.getId() = " + findMyTeam.getId()); System.out.println("findMyTeam.getTeamName() = " + findMyTeam.getTeamName()); System.out.println(" 영속? = " + em.contains(findMyTeam)); System.out.println(" ============= "); System.out.println(); Team teamB = new Team(); teamB.setId(findMyTeam.getId()); teamB.setTeamName("teamB"); System.out.println(" =====[4]===== "); System.out.println("teamB = " + teamB); System.out.println("teamB.getId() = " + teamB.getId()); System.out.println("teamB.getTeamName() = " + teamB.getTeamName()); System.out.println(" 영속? = " + em.contains(teamB)); System.out.println(" ============= "); System.out.println(); User user = new User(); user.setUsername("username"); user.setTeam(teamB); System.out.println(" =====[5]===== "); System.out.println("user.getTeam() = " + user.getTeam()); System.out.println("teamB = " + teamB); System.out.println("teamB.getId() = " + teamB.getId()); System.out.println("teamB.getTeamName() = " + teamB.getTeamName()); System.out.println(" 영속? = " + em.contains(teamB)); System.out.println(" ============= "); System.out.println(); em.persist(user); System.out.println(" =====[6]===== "); System.out.println("user.getTeam() = " + user.getTeam()); System.out.println("teamB = " + teamB); System.out.println("teamB.getId() = " + teamB.getId()); System.out.println("teamB.getTeamName() = " + teamB.getTeamName()); System.out.println(" 영속? = " + em.contains(teamB)); System.out.println(" ============= "); System.out.println(); tx.commit(); System.out.println(" =====[7]===== "); System.out.println("user.getTeam() = " + user.getTeam()); System.out.println("teamB = " + teamB); System.out.println("teamB.getId() = " + teamB.getId()); System.out.println("teamB.getTeamName() = " + teamB.getTeamName()); System.out.println(" 영속? = " + em.contains(teamB)); System.out.println(" ============= "); System.out.println(); }catch(Exception e){ e.printStackTrace(); tx.rollback(); }finally{ em.close(); } emf.close(); } =====[1]===== teamA = hellojpa.Team@fa5f81c teamA.getId() = null teamA.getTeamName() = teamA 영속? = false ============= =====[2]===== teamA = hellojpa.Team@fa5f81c teamA.getId() = 1 teamA.getTeamName() = teamA 영속? = true ============= =====[3]===== findMyTeam = hellojpa.Team@fa5f81c findMyTeam.getId() = 1 findMyTeam.getTeamName() = teamA 영속? = true ============= =====[4]===== teamB = hellojpa.Team@dd4aec3 teamB.getId() = 1 teamB.getTeamName() = teamB 영속? = false ============= =====[5]===== user.getTeam() = hellojpa.Team@dd4aec3 teamB = hellojpa.Team@dd4aec3 teamB.getId() = 1 teamB.getTeamName() = teamB 영속? = false ============= =====[6]===== user.getTeam() = hellojpa.Team@dd4aec3 teamB = hellojpa.Team@dd4aec3 teamB.getId() = 1 teamB.getTeamName() = teamB 영속? = false ============= =====[7]===== user.getTeam() = hellojpa.Team@dd4aec3 teamB = hellojpa.Team@dd4aec3 teamB.getId() = 1 teamB.getTeamName() = teamB 영속? = false ============= 궁금한 점은 다음과 같습니다:1. teamB가 영속 상태가 아닌데 어떻게 user가 저장될 수 있었는지 궁금합니다.2. user는 현재 teamB와 연관되어 있는데, 왜 DB에는 teamA가 나오는지 궁금합니다.좋은 강의 감사합니다!!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
8:15부분에 관해 질문있습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]회원가입을 하면 그냥 db에다가 데이터만 저장하면 되는데 왜 이렇게 id를 리턴 해주는지 모르겠습니다.
-
해결됨실전! Querydsl
query projection 아키텍쳐 관점
작업을하다보디 query projection 경우 아키텍처 관점(데이터 레이어)에서 Repository에 의존성이 생겨서 사용을 지양하자는 의견이 많던데 어떻게 생각하시나요?
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
뷰 개발 - 테이블페이지 (삽입 Script)부분
안녕하세요. fragment-script-util.html을 작성하고 강의에서 보여주신것처럼 addDetail('detail')을 동작하는 버튼을 누르면 내용이 비어있는채로 아래에 창이 생기질 않네요. 콘솔에서 확인해보면TypeError: Cannot read properties of null (reading 'detail') at addDetail (experience:775:65) at HTMLButtonElement.onclick (experience:366:105)이 나타나고 콘솔로그를 찍어보면 데이터테이블 초기화가 안되고 있는것같습니다. 어떤부분을 점검해봐야할까요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티를 다른 서비스로 바로 넘겨도 될까요?
a도메인 서비스에서 jpa로 가져온 엔티티를b도메인 서비스로 넘겨도 될까요?dto를 쓰지 않고 엔티티 타입을 그냥 바로 넘기려구요 이때 영속성 컨텍스트를 끊어주려고 OSIV off하고 데이터커넥션 끊기도록 설정할겁니다 이렇게만 하면 다른 서비스로 넘어가도 괜찮을까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Dto와 공통되는 클래스가 있을 때
안녕하세요 Dto클래스가 있을 때, 다른 곳에서도 그와 동일한 스펙의 클래스가 필요하다면 재사용을 해도 되는지, 아니라면 각각 구현해야 하는지 궁금합니다.예를 들어 컨트롤러에서 요청을 통해, Coordinate(위도와 경도를 필드로 갖는)라는 타입으로 좌표를 받아서 사용하는데, 다른 패키지에서도 동일한 스펙을 갖는 클래스가 필요하다면 Coordinate를 재사용해도 되는 걸까요? 아니면 CoordinateForXXXXDto와 같이 동일한 스펙의 클래스를 이름만 다르게 구현하여 사용해야 할까요? webdtorequestCoordinateDto Dto로만 사용되면 위와 비슷한 구조를 가지면 된다고 생각하는데, 만약 재사용이 가능하여 Dto의 역할(계층간의 데이터 전송)이 아닌, 오로지 하나의 클래스 안에서만 사용되는 경우도 포함돼 있다면 어떤 패키지에 놓아야 할지도 궁금합니다!public class CoordinateDto { private double latitude; private double longitude; }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 코드에서 플러시 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.package jpabook.jpashop.service; import jpabook.jpashop.domain.Member; import jpabook.jpashop.repository.MemberRepository; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; 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.junit.jupiter.SpringExtension; import org.springframework.transaction.annotation.Transactional; import static org.junit.jupiter.api.Assertions.*; @ExtendWith(SpringExtension.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 } }해당 코드에서 @Transactional 어노테이션으로 롤백이 일어나는 것은 이해했으나 이것이 Flush 자체가 일어나지 않는 다는 것이 이해 되지 않습니다. 회원가입시 em.persist()가 호출이 되면 자동으로 Flush발생했다가 다시롤백되는게 아니지 궁금해서 질문 남깁니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
어노테이션 상세 보기 단축키
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 내용]강의를 보다 보면 어노테이션이 어떻게 구현되어있는지 설명서? 를 보는 장면이 있는데, 무슨 단축키를 눌러야 볼 수 있나요?화면 캡쳐가 안되어서 강의 제목과 시간을 적습니다.엔티티클래스개발 1 22:35
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
H2 테이블 생성 안됌
1. 강의 내용과 관련된 질문인가요?네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? 네프로젝트 파일https://drive.google.com/file/d/1CzJgYLZqQ724aJMnYqODWUG6MK9h1K72/view?usp=sharing로그에 테이블 생성 쿼리와 insert 쿼리까지 나갔는데도 불구하고 h2 데이터 베이스에 테이블이 보이지 않습니다.[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.강의에서 나오는 예제에서는 Item 테이블을 두고, 하위 테이블인 Album, Book, Movie 테이블을 생성하여 상속하는 구조로 하고 있는데요. 실무에서는 상품 종류가 한두가지가 아니라 수백개, 수천개가 될텐데 그러면 이러한 테이블을 전부 만드나요? 예를 들면, 쿠팡 같은 쇼핑몰에서는 음식 뿐만 아니라 컴퓨터, 마우스,모니터, 커피, 프로틴, 과일, 연필, 물 등등 상품 종류가 어마어마하게 많은데 이를 어떻게 관리하는지 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
fetch join이 명시적 inner join과 다른 이점이 뭔가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용](Hibernate6버전 쓰고 있습니다.)1. 페치 조인 JPQLselect t from Team t join fetch t.members2. 명시적 내부 조인 JPQLselect t,m from Team t inner join t.members m위 JPQL을 실행하면 같은 SQL 쿼리가 실행됩니다.fetch join이 명시적 inner join과 다른 이점이 뭔가요?fetch join을 썼을 때, List<Team>으로 결과를 받고 중복없이 Team에 속한 members 리스트가 조회됐습니다.예를 들면, 팀A-> 회원1-> 회원2inner join을 썼을 때, List<Object[]>로 결과를 받고 Team과 Member가 쌍을 이뤄서 조회됐습니다.SQL 조회결과처럼 Team이 중복되어 출력됐습니다.팀 A, 회원1팀 A, 회원2팀이 중복되지 않고 한번만 출력된다.Object[] 타입으로 안다뤄도 되니 결과를 처리할 때 편하다.이 외에 다른 이점이 있나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
.setFirstResult(1) 부터 하는 이유?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]0으로 하셨다가 1로 변경하신 이유가 이해가 안 됩니다 ㅠㅠ