강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

이현송님의 프로필 이미지
이현송

작성한 질문수

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

변경 감지와 병합

작성

·

162

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
변경감지와 병합 강의에서 서비스단에도 set 을 되도록 쓰지말고 change 같은거 쓰라고 하셨는데 그럼 change 라는 메서드는 어디에 만드는게 좋나요?? 리포지토리 or 서비스 or 도메인의 Item 안에 ?? 어디인가요

답변 1

1

안녕하세요, 이현송 님. 공식 서포터즈 codesweaver 입니다.
.
change 및 관계메서드 등은 엔티티에 작성하시면 됩니다.

.
감사합니다.

이현송님의 프로필 이미지
이현송
질문자

근데 엔티티는 제가 작성할수 없는거 아닌가요?? 예를들어 entitymanager em 이런거는 리포지토리에서 불러올뿐 그 실체는 제가 작성한거 아니지 않나요??

안녕하세요 이현송님!

 

혹시 수업을 어디까지 학습하신건지 제가 알 수 없지만,

도메인 분석 설계 챕터의 - '엔티티 클래스 개발1' 을 확인하시면 엔티티를 작성하는 내용이 나옵니다.

이 엔티티 부분은 개발자가 직접 작성해야 합니다.

 

엔티티 매니저는 말씀하신 것처럼 사용자가 직접 수정하지는 않습니다.

감사합니다.

이현송님의 프로필 이미지
이현송
질문자

오.. 감사합니다 도메인 폴더에 있는게 거의 엔티티라는 @하고 어노테이션이 작성이 되어있군요.. 배웠습니다..

1. public void save(Item item) {

        if (item.getId() == null) {

            em.persist(item);

        } else {

            em.merge(item);

        }

    }

 

   2. public Item findOne(Long id) {

        return em.find(Item.class, id);

    }

그럼 1번 코드에서 em 은 괄호안에 item을 바로쓰는데 em.find 안에는 .class 까지 붙이는 이유가먼가요??

그리고 find 안에 id 값가지 넘겨주는거는 id 를 찾으려고 넘겨주는거죠??

안녕하세요!

 

엔티티 매니저에는 다양한 객체가 저장될 수 있습니다. 가령 Item, Member 등이요.

그래서 이를 저장하거나 찾을때 이를 클래스별로 구분할 필요가 있습니다.

.

svae()의 경우 Item 클래스의 인스턴스인 item 을 그대로 넣어주기에 엔티티 매니저 입장에서는 얘가 Item 클래스라는걸 알 수 있습니다.

.

반면 find()의 경우 Long id 라는 롱 타입의 숫자만을 가지고 원하는 객체를 찾아야 합니다. 그럼 이 아이디가 Item의 아이디인지 Member의 아이디인지 알 수 없겠지요? 그래서 어떤 클래스의 id를 말하는건지 모두 말해주어야 하는 것입니다.

.

가령 현송님이 커다란 자루에 빨간 공과 빨간 시계를 가지고 있습니다.

그 때 친구가 자루에 있는 '빨간거' 꺼내 줘. 라고 하면 현송님은 빨간것 중에 공을 말하는 건지 시계를 말하는건지 헷갈립니다.

그래서 친구나 '공, 빨간거' 꺼내줘 라고 해야 비로소 제대로 된 물건을 꺼낼 수 있습니다.

.

감사합니다.

 

이현송님의 프로필 이미지
이현송
질문자

크으... 설명 감사합니다.. svae() 이건 save() 말씀하신거죠 ??
진짜로 감사합니다.. 예시까지 자세하게 설명해주셔서 감사합니다..

이현송님의 프로필 이미지
이현송

작성한 질문수

질문하기