월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.find의 궁금점
안녕하세요. 공부를 하다가 궁금증이 생겨 남깁니다.위와 같은 코드를 실행했을 때 영속성 컨텍스트가 비어 있기에 아무것도 반환하지 못하는 것이라고 이해했는데 그렇다면 print가 찍히지 않는 이유는 무엇인가요? try catch로 nullpointerException인지 확인해봤는데 null은 아닌 것 같아서 문의 남깁니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
PPT 내용 중, DB 관계 그림 질문있습니다.
위 그림 1:N 관계에서 어떤 쪽은 삼각형에 동그라미가 붙어있고 어떤 쪽은 안붙어있는데 차이가 뭔가요?? 감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
상속 관계 엔티티 로직을 분기처리 하는 법?
안녕하세요 상속관계 엔티티를 다루는 방법에 대해 궁금한 점 있어 질문 드립니다상속관계의 엔티티가 존재하고, 자식 엔티티마다 서비스 로직이 다를 수 있을 때 어떻게 분기처리하는지 알고 싶어 질문 드립니다 @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "base_type") public abstract class BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; private String description; @Column(name = "base_type", updatable = false, insertable = false, length = 30) private String baseType; protected BaseEntity(Long id, String title, String description) { this.id = id; this.title = title; this.description = description; } } @Entity @DiscriminatorValue(value = "FIRST") @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter public class FirstEntity extends BaseEntity{ private int like; @Builder public FirstEntity(Long id, String title, String description, int like) { super(id, title, description); this.like = like; } } @Entity @DiscriminatorValue(value = "SECOND") @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter public class SecondEntity extends BaseEntity { private String redirectUrl; @Builder public SecondEntity(Long id, String title, String description, String redirectUrl) { super(id, title, description); this.redirectUrl = redirectUrl; } }이러한 상속구조 엔티티가 있고, 두 자식의 서비스 로직이 다를 수 있을 때컨트롤러에서 분기처리를 어떻게 하는지 알고 싶습니다@RestController @RequiredArgsConstructor @RequestMapping("/v1/test") public class TestController { private final TestService testService; @GetMapping public void findEntity(@RequestParam String type) { if(type.equalsIgnoreCase("first")) { } else if(type.equalsIgnoreCase("second")) { } //... //... //... } }만약 이러한 구조로 간다면, 자식클래스가 늘어났을 때 또 if문을 추가해야해서 효율적이지 못할 것 같아서요!지금 생각한 것은 상태 패턴을 이용하면 어떨까 하는데, 이게 좋은지 잘 모르겠습니다..public interface BaseContext { boolean support(String type); void executeFind(); }이렇게 인터페이스를 만들어주고@Component public class FirstContext implements BaseContext{ private static final String TYPE = "FIRST"; private final FirstService firstService; public FirstContext(FirstService firstService) { this.firstService = firstService; } @Override public boolean support(String type) { return TYPE.equalsIgnoreCase(type); } @Override public void executeFind() { firstService.find(); } }자식클래스의 상태를 구현하는 클래스를 만들어주고@RestController @RequiredArgsConstructor @RequestMapping("/v1/test") public class TestController { private final List<BaseContext> contexts; @GetMapping public void findEntity(@RequestParam String type) { BaseContext findContext = contexts.stream() .filter(context -> context.support(type)) .findAny() .orElseThrow(() -> new IllegalStateException("Error")); findContext.executeFind(); } } 컨트롤러에서는 이렇게 받아주면자식 엔티티가 늘어나도 if-else를 하지 않아도 된다고 생각했습니다다만, 자식 엔티티가 추가될 때 마다 Context를 추가해야 한다는 점과Context가 Service를 바라보고있어 Service가 수정되면 Context와 Service 2가지 모두 수정해야한다는 점이 마음에 걸립니다보통 상속관계의 엔티티를 다룰 때 어떤식으로 분기처리를 하나요??강사님이 아니시더라도 다른 수강생분들의 의견도 달아주시면 좋겠습니다!!
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계의 필요성
안녕하세요. 공부를 하다가 궁금한 부분이 생겨 질문 남깁니다.강의에서 최대한 모든 테이블을 단방향으로 설계하고 필요할 때만 양방향 연관관계를 맺어주면 된다고 하셨는데요. 양방향 연관관계가 어떤 상황에서 필요할까 고민하다가 제가 생각할 수 있는 모든 상황에서 어떻게든 단방향으로 처리할 수 있을 것 같다는 결론이 났습니다.하지만 분명 양방향이 필요한 순간이 있을 것 같은데, 어떤 상황에서 양방향 연관관계가 사용될까요?+ 좀 더 고민해보던 중에 예를들어 게시글과 댓글에 관계에서 게시글 내용조회와 함께 댓글 리스트가 필요할 때 단방향이라면 쿼리를 2번 날려야하는 반면 양방향으로 매핑이 되어있다면 페치조인등을 통해서 한번의 쿼리로 조회할 수 있다는 점이 필요성을 가지게 한다고 생각했는데 맞을까요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
사용자 정의 함수가 안됩니다..
persistence.xml 하이버네이트 6.2.2 final 입니다.<persistence-unit name="jpql"> <!-- spring --> <class>jpabasic.ex1hellojpa.jpql.Product</class> <class>jpabasic.ex1hellojpa.jpql.Address</class> <class>jpabasic.ex1hellojpa.jpql.Team</class> <class>jpabasic.ex1hellojpa.jpql.Member</class> <class>jpabasic.ex1hellojpa.jpql.Order</class> <properties> <property name="jakarta.persistence.jdbc.driver" value="org.h2.Driver" /> <property name="jakarta.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/jpabook" /> <property name="jakarta.persistence.jdbc.user" value="sa" /> <property name="jakarta.persistence.jdbc.password" value="" /> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql " value="true"/> <property name="hibernate.use_sql_comments" value="true"/> <property name="hibernate.hbm2ddl.auto" value="create"/> </properties> </persistence-unit>아예 빨간줄이 나오면서 등록이 되지 않아요.. 도와주세요
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
서브쿼리에서 사용한 ALL에 대한 궁금증이있습니다.
제가 작성한 JPQL 입니다"select o from Order o where o.orderAmount > ( select x.stockAmount from o.product x)"강사님이 작성한 JPQL 입니다."select o from Order o where o.orderAmount > ALL ( select x.stockAmount from o.product x)"// 전체 상품 각각의 재고보다 주문량이 많은 주문들이 조회를 하기 위해서 JPQL을 작성했는데요 첫번째 코드나 두번째 코드나 결과는 같다고 생각이 들었어요두 코드 모두select p2_0.stockAmount from Product p2_0 where p2_0.id=o1_0.product_id이 코드가 동작하게 되는데Product와 Order는 1:M인 관계로 stockAmount는 (1x1)이 나오게 되는데ALL을 사용할 이유가 있나해서 궁금합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
패치조인 할 경우 궁금한게 있습니다.
패치 조인시 연관된 엔티티를 한번에 조회 하는 걸로 이해했습니다.근데 LAZY 가 아닌 EAGER 로 연관관계를 했을 경우도한번에 가져오는 걸로 아는데,String query = "SELECT t FROM Team t JOIN t.members "; List<Team> resultList = em.createQuery(query, Team.class) .getResultList(); for(Team team: resultList){ System.out.println("team : " + team.getName() + ", member size = : " +team.getMemberList().size()); }위에 코드를 실행했을 경우, EAGER로 연관관계 설정을 해서패치 조인과 같이 한번에 조회 될거라고 생각되었는데, 그렇치 안더라구요. 이유를 알 수 있을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
could not initialize proxy 에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의를 수강중에 영속성 컨텍스트의 도움을 받을 수 없는 준영속 상태일때 프록시를 초기화 하면 해당 예외가 나온다고 들었습니다. 강의 중에는 나중에 개발하다가 이런 에러를 만나면 지금 말한걸 생각해주시면 된다 까지만 말씀해주셨는데요.. ㅎ 사실 제가 저 에러메세지를 해결못하고 있던차에 지금 강의를 수강한거라 그 해답이 궁금합니다. 혹시 강의의 부분이 could not initialize proxy 에러를 해결하는데 도움이 될까요? JPA기본편 강의 내용이 아니어도 좋습니다. 영한님 강의중에 이 부분을 실제 개발하시며 다루시는 부분이 있는지 궁금합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
검증을 사용할때
만약 Member에 검증이 필요하다고 하면검증객체를 따로 클래스로 만들어서 사용하나요?엔티티에 덧붙여서 사용하나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.find 시 쿼리문 2번 수행
답변 없으셔서 다시 남깁니다. 영속성 컨텍스트 2 강의의 약 7분 쯤 em.find를 2번하게 되어도 1차캐시 조회에 의해 쿼리문이 한번만 출력된다고 하셨는데저는 2번 출력되네요.. 문제가 뭘까요 https://drive.google.com/drive/folders/1rLlWTlGVWyFRoL-HXbvyWREnpHBC7OBe?usp=sharing 추가로 질문이 하나 더 있는데강의에서는 JPAMain 자바 파일의 try문을 수행하면 db에 바로 저장이 되는데저는 저장이 안됩니다.이것도 한번 확인 부탁드립니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
불변 제약 대체
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요! 불변 객체를 공부하다 궁굼점이 생겨 문의드립니다.부작용 차단을 위한 불변 제약을 두는 대신Member.classpublic void setAddress(Address address) { this.address = new Address(address); } Address.classpublic Address(Address address) { this.city = address.city; this.street = address.street; this.zipcode = address.zipcode; }와 같이 항상 새로운 객체를 생성하여 할당하는 방식을 사용한다면 값 변경에도 자유로울 수 있을 것 같은데 문제될 수 있는 부분이 있을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계 순환참조 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 강의 잘 듣고 있습니다.강의를 듣다가 궁금증이 생겨 질문 드립니다. 양방향 연관관계의 설정이 언제 필요할지 생각을 해보았는데 게시글과 댓글의 일대 다 관계에서게시글을 조회할때 댓글이 같이 조회되는것을 원하는 경우가 있을 것 같습니다. 그렇다면 이전강의에 말씀하셨던 무한 루프(?)에 빠질 수 있을 것 같은데요. 아마 이걸 순환참조라고 말한다고 알고 있습니다. 그러면 애초에 댓글은 댓글대로 따로 조회하고 게시글을 조회할때 댓글 조회하는 방식 즉 연관관계의 주인이 아닌곳에서 리스트를 조회하려고 하는 방식은 안쓰는것이 좋은것인가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
cascade 부모, 자식 동시 적용
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요,cascade 설정과정에서 궁굼증이 생겨 문의드립니다.부모 객체와 자식객체 양쪽다 CascadeType.ALL 옵션을 주고, 부모쪽에 orphanRemoval = true 옵션을 준 상태에서Parent parent = new Parent(); Child child = new Child(); Child child2 = new Child(); parent.addChild(child); parent.addChild(child2); Team findParent = em.find(Parent.class, 1L); findParent.getChild().remove(0);와 같이 진행 했을때,child가 삭제됨child가 삭제되며 cascade 옵션에 의해 부모인 team을 삭제함team을 삭제하기 전 cascade 옵션에 의해 자식에 포함된 child를 모두 삭제함team이 삭제됨이렇게 이해했고 실제로 parent, child, child2 모두 삭제 되었습니다. 그런데Parent parent = new Parent(); Child child = new Child(); Child child2 = new Child(); Child child3 = new Child(); ... Child childN = new Child(); parent.addChild(child); parent.addChild(child2); parent.addChild(child3); ... parent.addChild(childN); Team findParent = em.find(Parent.class, 1L); findParent.getChild().remove(0);이렇게 자식을 3개 이상 넣어줬을경우 자식객체 2개만 삭제(remove에 넣어주는 index에 따라 2개 삭제될 자식이 결정됨)되고 나머지 자식과 부모는 남아있는걸로 확인되는데... 어떤 매커니즘때문에 이런 현상이 나오는걸까요?..
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
jpa 배운 내용으로 게시판을 만들려고 하는데 에러 해결이 어려워서 조심스럽게 글 올립니다..
Error creating bean with name 'entityManagerFactory' Could not determine recommended JdbcType for toyProject1.board.domain.Member 요런 에러가 떠서 계속 구글링을 해보았는데 저는 제가 작성한 Member 엔티티에서 문제를 못찾겠어요ㅠㅠㅠ 연관관계 매핑도 일대다로 잘한 것 같은데,,, 정말 귀찮으시겠지만 제발 한번만 봐주세요ㅠㅠㅠㅠ 삽질중입니다..... https://drive.google.com/file/d/1ylrcAJFzmTZM8FXjzw_lVCM0zWiyRt9-/view?usp=sharing
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
임베디드와 extend
[질문 내용]공용 클래스를 하나 만들어 그 클래스를 상속 받는 것이랑 임베디드 하는 것이랑 다른점이 무엇인가요?DB에는 똑같이 쿼리가 작성되는 것 같습니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
orphanRemoval = false 설정시 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 영한님, 해당 부분 공부하다가 이리저리 검색해보다가 질문 남깁니다! https://www.inflearn.com/course/lecture?courseSlug=ORM-JPA-Basic&unitId=21710&category=questionDetail&tab=community&q=659760해당 글에서 서포터즈님께서 답변해주신 바로는,orphanRemoval = false 설정시 findParent.getChildList().remove(0); 를 통하여 부모객체에서 자식리스트의 자식객체를 삭제하면, DB에는 그대로 남아있지만, FK키가 null로 변한다고 답변해주셨는데요. 제가 실제로 테스트 해본 결과에는.. DB에 FK키가 그대로 부모의 PK키를 명시하고 있습니다.어떤 것이 맞는 것인지 궁금합니다. import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent", orphanRemoval = false) private List<Child> childList = new ArrayList<>(); public void addChild(Child child){ childList.add(child); child.setParent(this); } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Child> getChildList() { return childList; } public void setChildList(List<Child> childList) { this.childList = childList; } }@Entity public class Child { @Id @GeneratedValue private Long id; private String name; @ManyToOne @JoinColumn(name = "PARENT_ID") private Parent parent; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Parent getParent() { return parent; } public void setParent(Parent parent) { this.parent = parent; } }package hellojpa; import javax.persistence.*; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Child child1 = new Child(); Child child2 = new Child(); Parent parent = new Parent(); parent.addChild(child1); parent.addChild(child2); em.persist(parent); em.persist(child1); em.persist(child2); em.flush(); em.clear(); Parent findParent = em.find(Parent.class, parent.getId()); findParent.getChildList().remove(0); // em.remove(findParent); tx.commit(); } catch (Exception e) { tx.rollback(); e.printStackTrace(); } finally { em.close(); } emf.close(); } }
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
CascadeType.ALL + orphanRemovel = true 와 그냥 CascadeType.ALL만 썼을 때의 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 영한님의 강의를 모두사서.. 탐독하는 주니어 개발자 입니다 ㅎㅎ.. 21:37 부분에 영속성 전이 + 고아 객체, 생명주기 파트에서 이해가 가지 않는 부분이 있어서요. 위에서 명시해놓으시기를 CascadeType.ALL + orpahanRemover=true 두 옵션을 모두 활성화 하면 부모 엔티티를 통해서 자식의 생명주기를 관리할 수 있음 이라고 명시되어있습니다. 제가 궁금한부분은 CascadeType.ALL 자체가 CascadeType.ALL + orpahanRemove=true 를 이미 모두 포함하고 있다는 생각이 드는데요.. CascadeType.All 만 설정CascadeType.All + orpahanRemove=true 모두 설정두 가지의 차이가 있나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPQL 동적 쿼리
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용]그 강의에서 동적 쿼리 작성은 QueryDSL을 사용해야 한다고 했는데, 강의에서 em.createQuery()로 JPQL을 작성하고 setParameter를 통해 바인딩을 한다면 그게 동적 쿼리 작성하는거 아닌가요???굳이 QueryDSL을 사용해야할 이유가 있나요??
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
도메인 객체와 엔티티 객체 분리 시 객체 그래프 탐색 관련 질문
안녕하세요. 김영한 선생님의 강의를 참 잘 보고 있는 학생입니다. SQL 중심적인 개발의 문제점 편에서, 객체지향 프로그래밍에서 객체는 자유롭게 객체 그래프를 탐색할 수 있어야하지만 SQL로 개발하는 경우에는 처음 실행하는 SQL에 따라 탐색 범위가 결정된다는 문제가 있다고 말씀하셨습니다. 그리고 엄격한 도메인 주도 설계의 관점에서는 '도메인 객체'와 '엔티티 객체'를 분리해야 한다고 알고 있습니다. 비즈니스 로직을 다루는 도메인 객체가 JPA라고 하는 기술에 의존하는 것은 영 즐거운 일은 아니기 때문이죠..( https://stackoverflow.com/questions/24703756/having-separate-domain-model-and-persistence-model-in-ddd )그렇기 때문에 도메인 객체와 엔티티 객체를 분리하게 된다면 Repository 계층에서 예를 들어 findById를 했을 경우 엔티티 객체를 도메인 객체로 매핑해서 돌려주어야 합니다. 그런데 이럴 경우, 기존의 SQL로 개발하는 경우와 비슷한 문제가 발생하게 되는 것 같습니다. 매핑을 어디까지해서 돌려주어야 하느냐는 점이죠. Member를 조회했을 때, 객체 그래프 안에 있는 Category까지 싹싹 다 조회해와서 매핑을 해주기도 곤란한 노릇이고, MemberWithTeam, MemberWithOrderAndOrderItem... 와 같은 객체를 따로 따로 만드는 것도 요상해보입니다. 그렇다고 객체 그래프를 다 끊어놓자니 그것도 객체지향적이지 않은 것 같아보이구요.. 이런 상황에서는 어떤 식으로 도메인 객체를 설계하는지, 엔티티 객체의 매핑은 어떤 방법으로 이루어지는지가 너무 궁금합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
읽기전용의 의미및 객체의 참조 업데이트
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]우선 강의 초반 내용중 Team 객체의 members는 읽기전용이다. 때문에 members를 업데이트해도 JPA에서 update나 insert가 이뤄지지 않는다, 라고 하셨는데 findTeam.getMembers().get(0).setName("a");처럼 team객체의 members객체에 접근하여 값을 변경하면 update 쿼리가 실행되는 이유는 어떤걸까요?두번째로 team객체와 member객체 생성하게되면 team객체에서 참조하는 members를 JPA에서 맵핑해줄거라고 생각했는데 team객체에 members는 생성된 member 객체를 참조하지 않고 em.clear및 em.find로 DB를 통해 team객체를 받아와야 members를 참조하는 구조로 되어있더라구요.JPA에서 이부분은 지원이 되지 않는 부분일까요?