소개
게시글
질문&답변
쿼리로 어느정도의 연산 레벨까지 허용 하는게 맞을까요?
답변을 듣고 나니 어느 정도 감이 더 잡힌 것 같습니다. 감사합니다 도사님 최고! ^^
- 1
- 2
- 1.2K
질문&답변
@Autowired EntityManager 세션 관리에 대해 질문 드립니다.
아이고~~ JPA 도사님~ ㅠㅠ 도사님 말씀대로 `selectPoint()`는 같은 클래스에 있는 함수였습니다. 어떻게 이런 문제들을 한번에 딱! 보시고 알아맞추시는지 정말 신통하십니다.ㅠ 1번은 말씀하신대로 영속성 컨텍스트가 없어서 그런것 같습니다. 이 부분은 제가 공부를 소홀히 하여 파악하지 못한것 같습니다..ㅠ 사실 3번도 제가 공부를 소홀히 하지 않았다면 (2권의 모니터 받침대를 더 자세히 살폈으면 어렵지 않게 파악 했을 텐데..) 클래스를 분리하여 실행해보니 생각한대로 잘 돌아 가네요. 도사님 없었으면 JPA 공부 어찌 했을런지 생각만 해도 눈앞이 캄캄합니다. 이제 정말 질문 하지 않도록 공부 열심히 하겠습니다. 다시 한 번 도사님의 신기에 감탄을 하며 감사드립니다ㅠㅠ 부디 좋은 주말 보내시길 바랍니다.
- 0
- 4
- 2.4K
질문&답변
아크 관계의 경우 JPA에서 어떤 식으로 매핑 해야 하나요?
김영한님의 따듯한 답변에 온몸이 녹아버릴 것 같습니다..ㅠㅠ 늦은 밤에도 이렇게 정성스런 답변을 해주시다니, 천사가 사람의 흉내를 내고 있는지 의심스러운 부분입니다. JPA를 공부하기 위해 이 강의를 선택한건 신의 한수였던것 같습니다. (널리 알리겠습니다.) 그 동안 김영한님께서 주신 답변이 제가 JPA를 공부하여 실무에 적용하는데 정말 큰 도움이 될 것 같습니다. 이런 고퀄리티의 답변을 주실지 상상도 못했습니다. 정말 너무 감사드리고, 앞으로도 김영한님의 모든 강의와 도서를 다 구매하여 작게나마 은혜를 보답하겠습니다. 이후에는 질문이 아닌 실무에 JPA를 완전히 적용 했을 때 어떻게 적용했는지에 대한 후기를 남기겠습니다. 실무에 언제 적용이 가능할지 아직은 알수 없지만, 확실한건 적용하게 되면 그건 김영한님의 강의와 답변이 없었다면 매우 힘든 일이였을 것입니다. 다시 한 번 정성스러운 답변에 감사드리며, 그 모습에 존경 합니다. (_ _)
- 0
- 9
- 890
질문&답변
아크 관계의 경우 JPA에서 어떤 식으로 매핑 해야 하나요?
안녕하세요 김영한님 제가 어디 물어볼 곳이 없어 다시 한번 여쭙게 되네요.(하루만에 다시 찾아온 이 무능력한 사람..) 바쁘실텐데 자꾸 죄송합니다. 세 가지 확인 하고 싶은 부분이 있어 질문 드립니다. 답변 해주시면 감사하겠습니다.ㅠㅠ 1. arc를 유지하지 않는 방안이라면 `point` 테이블에서 `target_id`를 제거 하고, point 테이블을 슈퍼타입 테이블로 공통 값을 남겨두고, 나머지는 구분 타입마다 서브 테이블을 하나씩 만든다는 말씀 인가요? [기존 ERD] (사진) [신규 ERD] (사진) `point` 테이블에서 `target_id`를 제거 하고 공통 부분은 남겨 둔 채, 타입별로 서브 테이블을 만들었습니다. `member`(회원 정보) 테이블에 `point_id`를 만들려니 뭔가 이상한 것 같아서 추천인 회원 가입 테이블 `recommender`를 서브 테이블로 생성 하였습니다. `offer_wall` 테이블은 기존 테이블에서 `point_id`만 추가하면 서브 테이블이 될것 같아서 따로 테이블을 생성하지 않았습니다. 이렇게 타입별로 서브테이블이 생성 되는 것이 맞는 건가요? 2. 여전히 `point_manager_id`로 테이블을 구분하여 `point_id`를 통해 아크 타입으로 하위 테이블로 찾아가는게 가능합니다. 제가 잘못 만들어서 아직 아크 관계처럼 동작이 가능한건가요? 3. 마지막으로 가장 궁금한 질문입니다. 전체 데이터(모든타입)에서 `point_id`가 유니크한 값이 됐기 때문에 서브 테이블에서 선처리를 하고, 슈퍼 테이블로 올라갈 수 있게 된거 같습니다. 슈퍼/서브 테이블 구조에 JPA를 적용하게 되면 아직 아크 관계처럼 동작할 수 있는 방법은 지양 하고, 항상 서브 테이블에서 선처리를 해야 되는건가요?
- 0
- 9
- 890
질문&답변
아크 관계의 경우 JPA에서 어떤 식으로 매핑 해야 하나요?
실제 업무에서는 현재 자주 사용 되는 것만 해도 4개까지 확장 되어 있고, 자주 사용 되지 않는것까지 포함하면 10개가 넘어 갑니다. 저는 JPA도 적용 시키고 싶고, 유지보수도 편한걸 좋아하니 김영한님의 조언을 참고하여, 상속관계를 매핑하여 해결 하는 방향으로 가보도록 하겠습니다. 먼저 Point 테이블을 슈퍼타입과 서브타입으로 만들라는 말씀이 지금은 명확하게 어떤 뜻인지 이해 하지 못했지만 더 공부하여 시도해 보고, 혹시 막히는 부분이 있다면 그 때 김영한님의 조언을 다시 한 번 부탁드리겠습니다.(최대한 질문하지 않도록 하겠습니다.) 늦은 시간까지 정성스러운 답변 감사드립니다.ㅠ 좋은 밤 보내시길 바랍니다. ^^
- 0
- 9
- 890
질문&답변
아크 관계의 경우 JPA에서 어떤 식으로 매핑 해야 하나요?
안녕하세요 김영한님 :D 늦은 시간까지 고생이 많으십니다. 제가 아크 관계에 여러 케이스가 있는지 몰랐습니다ㅠㅠ 비효율적인 질문을 하여 두 번 답변 하시게 만들어 송구스럽습니다.ㅠㅠ 먼저 ERD입니다. 최대한 자세하고, 간단하게 작성했습니다. (사진) 업무 내용은 포인트 적립입니다. 예제에서는 포인트를 적립하는 방법은 1. 광고를 보는 것과 2. 다른 사람을 초대하여 회원 가입 시키는 것입니다. `point` 테이블에서 주요 내용은 - 누구에게 적립 시켜줄 것인지 (`member_id`) - 어떤 유형의 포인트 적립인지 (`point_manager_id`) - 이 값에 따라 target_id가 참조해야 할 테이블이 바뀝니다. - 적립 되는 소스를 가리키는 (`target_id`)가 있습니다. - 이 `target_id`의 참조 대상은 `point_manager_id`의 값에 따라 `member.id` 일수도 있고, `offer_wall.id` 일수도 있습니다. - 참조해야 할 대상이 없는 경우 이 값은 `0`으로 들어갑니다. 사실상 `null`이죠. ex) 출석체크. 출석체크 관련 테이블은 없습니다. 예제에서는 `1`이면 `member` 테이블을 참조하고, `2`이면 `offer_wall` 테이블을 참조한다고 보시면 되겠습니다. 아래 테이블 DDL과 INSERT용 DML을 작성 하였습니다. `mariadb`를 사용하였고 스키마 이름은 `test`로 생성 하였습니다. /* 회원 정보 */create table member( id int auto_increment primary key, recommender int null comment '추천인 회원 번호');/* 광고 정보 */create table offerwall( id int auto_increment primary key, ads_name varchar(45) not null comment '광고 내용');/* 포인트 적립 내역 */create table point( id int auto_increment primary key, member_id int not null comment '회원 번호', point_manager_id int not null comment '포인트 분류 번호', target_id int default 0 not null comment '회원 번호 or 광고 번호', content varchar(50) not null comment '포인트 적립 내용', value int not null comment '적립 금액', constraint point_member_id_fk foreign key (member_id) references member (id), constraint point_offerwall_id_fk foreign key (target_id) references offerwall (id), constraint point_member_id_fk_2 foreign key (target_id) references member (id), constraint point_point_manager_id_fk foreign key (point_manager_id) references point_manager (id)) charset = utf8;/* 포인트 적립 구분 */create table point_manager( id int auto_increment primary key, content varchar(25) not null) charset = utf8; /* INSERT member */INSERT INTO test.member (recommender) VALUES (null);INSERT INTO test.member (recommender) VALUES (1);/* INSERT ads */INSERT INTO test.offerwall (id, ads_name) VALUES (1, 'JPA ADS');INSERT INTO test.offerwall (id, ads_name) VALUES (2, 'JAVA ADS');/* INSERT point */INSERT INTO test.point (id, member_id, point_manager_id, target_id, content, value) VALUES (1, 1, 1, 2, '친구 초대', 10);INSERT INTO test.point (id, member_id, point_manager_id, target_id, content, value) VALUES (2, 1, 2, 1, 'JPA ADS', 1);INSERT INTO test.point (id, member_id, point_manager_id, target_id, content, value) VALUES (3, 2, 2, 2, 'JAVA ADS', 1);/* INSERT point_manager */INSERT INTO test.point_manager (id, content) VALUES (1, '친구 초대');INSERT INTO test.point_manager (id, content) VALUES (2, '광고 적립'); 혹시 이 구조에서 아크 관계가 아닌 다른 방식을 추천 하신다면 어디를 어떻게 변경하는게 좋은지 알려주시면 감사하겠습니다. 아니라면 아크 관계에서도 JPA를 잘 적용하여 사용할 수 있는 방법이 있으면 어떤 방식으로 해결 할 수 있는지 알려주시면 감사하겠습니다. (_ _) p.s: 토비의 스프링은 오래 전부터 회사 모니터 아래에서 더할나위 없이 확실하게 제 역할을 해내는 중입니다. 특히 듀얼모니터와는 최고의 시너지를 발휘하는 것 같아 다른 제품을 고려해볼 필요도 없는 최고의 물건이더군요. 김영한님께서 추천해주시는 말씀을 들으니 역시 제 선택이 틀리지 않았다는 확신을 다시 한 번 하게 됩니다.
- 0
- 9
- 890