묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
강의 내용 질문드립니다.
package jpabook.jpashop.domain.repository; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import jakarta.persistence.PersistenceUnit; import jpabook.jpashop.domain.Member; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import java.util.List; @Repository @RequiredArgsConstructor public class MemberRepository { private final EntityManager em; public void save(Member member) { em.persist(member); } public Member findOne(Long id) { return em.find(Member.class, id); } public List<Member> findAll() { // 회원 목록 조회 return em.createQuery("select m from Member m", Member.class) ry .getResultList(); } public List<Member> findByName(String name) { return em.createQuery("select m from Member m where m.name = :name", Member.class) .setParameter("name", name) .getResultList(); } } 위의 코드에서 findByName메소드에서 왜 단건조회가 아닌 리스트 조회를 사용한건가요? 어차피 중복가입은 안되고 이름으로 조회하니까 하나의 결과가 나와야하는거 아닌가요?findByName 메소드에서 setParameter은 왜 있는건가요? 설명부탁드릴게요.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
DDD 와 엔티티 매핑
안녕하세요. JPA를 사용해서 엔티티 매핑할 때 DDD에서 말하는 엔티티, 즉 도메인 객체를 바로 매핑하시나요? 아니면 JPA 엔티티를 도메인 객체와는 별개로 만들어서 매핑하시나요? 예제로 가르쳐주시는 건 바로 매핑하시는데, 혹시 실무에선 또 다른지 궁금해서 질문 드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 생명주기에 대한 필드 추가시 질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? [질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 제목과 같이, 엔티티 설계시에 각 레코드에 대한 생명주기 필드들을 추가하고 싶습니다. 예를 들어 다음과 같이, startDate: LocalDateTime endDate: LocalDateTime status: String 필드들을 모든 엔티티에 추가한다고 할 때, LifeCycleModel 이라는 class 를 선언하여 해당 필드들을 선언하고 이를 상속받게 하려고 합니다. 여기서 질문이 있는데, 이럴 때 임베디드 타입을 사용하는게 좋을까요 아니면 abstract class 로 만들어 @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 전략을 사용하는게 좋을까요? 그마저도 아니라면 각 엔티티에 필드들을 따로 추가하는게 좋을까요? 현업에서는 어떤 방식을 사용하시는지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
엔티티 내 참조형 필드 질문드립니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 늘 강의 감사드립니다! Order 엔티티 클래스 선언하는 과정에서, 다른 필드의 자료형은 Long, String 등 참조형 변수인데, itemPrice, discountPrice의 경우는 Integer가 아닌 int로 선언하신 이유에 대해 질문 드리고 싶습니다. public class Order { private Long memberId; private String itemName; private int itemPrice; private int discountPrice; .... } 엔티티의 경우, 내부 필드를 참조형으로 선언하는 것이 권장되어 있다는 답글을 본 것 같은데, 분명 선생님께서 어떠한 논리에 의해 작성하신 것으로 느껴집니다! 평상시 혼자 연습할 때는 많이 헷갈려서, 이 부분에 대한 작은 기준점을 하나 주시면 공부에 큰 도움이 될 것 같습니다. 늘 감사합니다!
-
미해결스프링 데이터 JPA
엔티티를 상속받는 DTO가 일반적인가요?
안녕하세요. 기선님 강의 너무 재밌게 잘 보고 있습니다. 질문드릴것이 있는데요 그전에 상황을 설명하면 이렇습니다. (이해하기 쉬우시게 한글로 적겠습니다) '병원' , '환자' 라고 하는 두 엔티티가 있습니다. 환자는 병원을 참조하고 있습니다(FK) @Entity@Getter @Setter@Builder @EqualsAndHashCode(of = "id")@AllArgsConstructor @NoArgsConstructorpublic class 병원 { @Id @GeneratedValue private Long id; private String name; . . . . // 환자 수 @Transient private Integer 환자수; } @Entity@Getter @Setter@EqualsAndHashCode(of = "id")@AllArgsConstructor@NoArgsConstructorpublic class 환자 { // 환자 아이디 @Id @GeneratedValue @Column(name = "PAT_ID") private Long id; // 병원 @ManyToOne @JoinColumn(name = "HOSP_ID") private 병원 병원; . . . .} 위와 같이 두 엔티티가 존재하는데 병원 리스트를 검색하면서 각 병원에서 수용중인 환자 수를 같이 하고 불러오고 싶습니다. 이를테면 환자수가 1명이상인 병원목록을 불러온다했을때 이걸 SQL로 작성하면 SELECT h.*, ( SELECT COUNT(*) FROM patient WHERE hosp_id = h.hosp_id ) as '환자수'FROM hospital hWHERE ( SELECT COUNT(*) FROM patient WHERE hosp_id = h.hosp_id ) > 1; (사실 이게 효율적인 SQL인지도 모르겠습니다만, 전 이렇게 보통 씁니다..) 처럼 작성할 수 있을건데요 이럴때 세가지 질문이 있습니다. 1. 병원 엔티티 클래스에 '환자수' 라는게 있는게 일단 맞는지 부터가 문제입니다. 병원 리스트를 조회할때 환자수가 몇명인지 정보도 같이 필요한 페이지도 있고 필요가 없는 페이지도 있습니다. 단, 환자수 정보가 필요할때는 '몇명 이상의 환자가 있는 병원 목록'과 같이 (위 SQL과 같이) where 절에 조건도 같이 붙게 됩니다. 환자수는 DTO로 따로 빼는게 맞을까요? 2. (1번질문에서 따로 빼는게 좋겠다고 하였을때) 환자수를 포함하는 병원DTO를 만든다고 했을때 사실 그 DTO는 병원의 모든 필드가 필요 합니다. 그래서 하려면 아래처럼 병원을 상속받는 식이 되어야 할텐데 이렇게 DTO 클래스가 엔티티 클래스를 상속받아도 문제가 없고, 이렇게 사용하는게 일반적으로 현업에서도 많이 있는 일인가요? public class 병원출력DTO extends 병원 { private Integer 환자수;} 3. 제가 하고자하는 것 ( 엔티티에 있는 모든 정보 + 서브쿼리를 통한 추가정보를 같이 불러오고 서브쿼리를 이용한 WHERE절 ) 이 굉장히 일반적으로 많이 쓰이는 것이라 분명 JPA 프로그래밍으로 충분히 쉽게 하는 방법이 이미 있을것 같은데 지식의 끊이 짧다보니 어떤 방법을 써야하는지 감을 못잡겠습니다. SELECT h.*, ( SELECT COUNT(*) FROM patient WHERE hosp_id = h.hosp_id ) as '환자수'FROM hospital hWHERE ( SELECT COUNT(*) FROM patient WHERE hosp_id = h.hosp_id ) > 1; 이런 것을 하기위해 제가 뭘 찾아보고 공부하면 되는지 키워드나 팁를 알려주실수 있을까요 (QueryDsl을 활용하면 될것 같긴한데.. )
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
categoty 엔티티
category 엔티티의 parent와 child가 이해가 안갑니다 ㅠㅠ. parent_id를 속성으로하는 테이블이 없는데 혹시 셀프조인인가요? 야생형으로 진행중이라 그런데 살짝만 알려주실수 있나요?