inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

테스트 케이스가 잘못되어있는것 같습니다.

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

코드는 동일하게 작성하였는데 정답과 오답을 왔다갔다해서 테스트케이스를 확인하게됬습니다. 작성한 코드는 아래와 같습니다 점검도 한번 부탁드립니다. public int solution(int[][] arr) { int num=0; int max=Integer.MIN_VALUE; // i = 학생별 검사 for(int i=0; i<arr.length; i++) { //학생의 겹침 횟수 int cnt = 0; //j = 학년 for(int j=0; j<arr[i].length; j++) { // k = 다른 학생과 비교 for(int k=0; k<arr.length; k++) { if(arr[i][j] == arr[k][j]) cnt++; } } if(max<cnt) { max = cnt; num = i+1; } } return num; }

  • java
  • 코테 준비 같이 해요!
kym9129 댓글 2 좋아요 0 조회수 381

N+1 현상

미해결

실전! Querydsl

안녕하세요 영한님 잘보고있습니다. 감사합니다 질문이 하나 있습니다. public List<MemberTeamDto> searchByBuilder(MemberSearchCondition condition){ BooleanBuilder builder = new BooleanBuilder(); if(StringUtils.hasText(condition.getUsername())){ builder.and(member.username.eq(condition.getUsername())); } if(StringUtils.hasText(condition.getTeamName())){ builder.and(team.name.eq(condition.getTeamName())); } if(condition.getAgeGoe() != null){ builder.and(member.age.goe(condition.getAgeGoe())); } if(condition.getAgeLoe() != null){ builder.and(member.age.loe(condition.getAgeLoe())); } return queryFactory .select(new QMemberTeamDto( member.id.as("memberId"), member.username, member.age, team.id.as("teamId"), team.name.as("teamName") )) .from(member) .leftJoin(member.team, team) .where(builder) .fetch(); } //페치조인 미 적용 테스트를 해보면 @Test public void searchTest(){ Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(teamA); em.persist(teamB); Member member1 = new Member("member1", 10, teamA); Member member2 = new Member("member2", 20, teamA); Member member3 = new Member("member3", 30, teamB); Member member4 = new Member("member4" ,40, teamB); em.persist(member1); em.persist(member2); em.persist(member3); em.persist(member4); MemberSearchCondition condition = new MemberSearchCondition(); condition.setAgeGoe(35); condition.setAgeLoe(40); condition.setTeamName("teamB"); List<MemberTeamDto> result = memberJpaRepository.searchByBuilder(condition); assertThat(result).extracting("username").containsExactly("member4"); } N+1 같은 현상이 일어나지 않습니다. 페치 조인을 사용하지 않았는데 이유가 있을까요 ?

  • JPA
  • java
H K 댓글 1 좋아요 1 조회수 394

혹시 점보트론 적용 안되시는분들은

미해결

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

위에 많은분들이 말씀하셨듯이 현재 부트스트랩 최신버전은 5이기 때문에 점보트론이 적용되지 않는 문제가 있었는데 저처럼 정 신경쓰이시는 분들은 이걸로 쓰시면 될 것 같습니다 <!-- Latest compiled and minified CSS --> < link rel ="stylesheet" href ="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" > <!-- jQuery library --> < script src ="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js" > < /script > <!-- Popper JS --> < script src ="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js" > < /script > <!-- Latest compiled JavaScript --> < script src ="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" > < /script > header.html의 bootstrap CSS 주석 부분에 붙이시면 됩니다 뒷부분을 아직 안들어서 그런데 CSS만 필요하신거면 4가지중 맨 위에 부분만 이용하셔도 되지 않을까 싶습니다

  • java
  • spring-boot
  • 웹앱
  • JPA
  • spring
KoorunG 댓글 5 좋아요 24 조회수 1231

detach 후에 merge 에 관한 질문입니다

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요! 언제나 좋은 강의 감사드립니다. 강의를 듣고 여러가지 테스트를 진행하던 중 궁금증이 생겨 질문남길게요. 테스트를 진행했던 코드들은 다음과 같습니다. 1. 엔티티를 detach 한 상태에서 커밋시 DB에 쿼리가 날리가지 않는다. (영속성 컨택스트가 비어있음으로) @Test @Rollback(value = false) void detachTest(){ Person person = new Person(); person.setId(1l); person.setName("test1"); em.persist(person); em.detach(person); } -> 예상대로 동작하였습니다. 2. clear() 를 통해 영속성 컨택스트를 비운 후 merge() 를 통해 다시 영속화하면 커밋시 반영이 될 것. @Test @Rollback(value = false) void detachTest(){ Person person = new Person(); person.setId(1l); person.setName("test1"); em.persist(person); em.clear(); em.merge(person); } -> 예상대로 동작하였습니다. 3. detach 를 통해 영속성컨택스트에서 엔티티를 준영속 상태로 변경한 후 merge() 하여 다시 영속화 하면 커밋시 반영이 될 것 @Test @Rollback(value = false) void detachTest(){ Person person = new Person(); person.setId(1l); person.setName("test1"); em.persist(person); em.detach(person); em.merge(person); } -> 제 생각과 달리 possible non-threadsafe access to session 에러가 떨어졌는데 그 이유를 곰곰히 생각해봤지만 가늠이 잘 가지 않아 질문드립니다.

  • java
  • JPA
jaden 댓글 1 좋아요 1 조회수 1343

어느것부터 다운로드를 해야하는지 좀 막히네요

미해결

자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지!!

안녕하세요 자바를 처음 배우는 학생입니다. 지금 다운로드를 어느것을 해야하는지 부터 잘 모르겠습니다. 수업 내용이 18년도 자료라서 21년도에 홈페이지가 리뉴얼되서 지금이랑 많이 다릅니다. 일단 jdk-16.0.2_windows-x64_bin devlopment kit을 다운받았었는데 강의자료에는 java 8u131로 받으셔서 다시 새로 받을려고 하는데 안보입니다. 그래서 java se 8u301이 있어서 이걸 받을려고 하는데 계정이 필요하다고 나옵니다. 그러면 오라클 계정을 만들고 이걸 받으면 되는 건가요? 친절한 답변 부탁드립니다.

  • java
  • java
  • javase
  • javase8
  • javse16
5060 취미디지털 피아노 댓글 1 좋아요 0 조회수 373

양방향 매핑을 무조건 사용해야하나요?

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

개념이 헷갈려서 질문 드립니다. 1. Team의 List members를 사용하지 않고 Member에 있는 외래키를 이용해 팀의 멤버를 select하는 방법을 사용하면 안되나요? 2. 지금은 1:N 이지만 멤버도 여러 Team을 가질수 있는 N:N 을 한다고 가정하면 그 경우 1:N으로 나누어야해서 MemberTeam 같은 양 테이블의 기본키를 복합키로 가지고 있는 테이블이 필요하다고 알고 있습니다. 양방향 객체 관계를 가지면 위 테이블이 필요가 없어보이는데 중간 테이블을 만들고 select를 하는 것은 안되나요? 제가 이해를 잘못해서 그런지 굉장히 헷갈리네요

  • JPA
  • java
BJP 댓글 1 좋아요 1 조회수 463

baseEntity와 softDelete 질문

미해결

실전! 스프링 데이터 JPA

우선 관련 다른 댓글들은 읽고왔는데 더 궁금한 점이 있어 질문드립니다. Q1. baseEntity에서 abstract class를 사용하지 않고 실제 class를 사용하신 이유 softDelete 사용시 springdatajpa 레퍼런스 닥스에서는 엔티티에 delete flag를 만들어주고, @sql로 delete 실행을 delete flag를 true로 만들어주는 방식을 예제로 두고 있습니다. 그러면 baseEntity에서 - 필드 delete flag 선언 -> 전역 엔티티에 적용 - @sql 로 delete 실행 변경 -> 전역정용 - @where절 delete=false -> 전역 적용 이렇게 할 경우 장점으로는 cascade 옵션으로 delete// orphanRemoval에도 자동으로 delete 쿼리가 업데이트 쿼리로 변경되어 삭제 플레그의 연관관계를 보다 쉽게 처리할 수 있는거로 생각됩니다. 또한 필터? 옵션으로서 실제 플레그로 삭제된 엔티티도 조회 가능하도록 제공하는걸 확인했습니다. 관련 다른 댓글에서 답변해주신것을 보면 영한님은 전역 엔티티가 아닌 엔티티별로 메서드를 정의해주고 연관관계가 있을경우 직접 연관관계 메서드에서 해당 메서드를 사용하시는 것으로 추측됩니다. Q2. 그렇게 사용하시는 걸 선호하시는 이유를 알 수 있을까요? 개인적으로 전역으로 관리하는게 좋겠다 싶었던 이유는 사용자에 의해 기록된 모든 데이터가 기업의 입장에서는 엄청나게 큰 자산이고, 이것을 통해 추천 상품 알고리즘을 위한 데이터로 활용할수도 있고 (주문기록, 회원의 나이 등 정보, 관심상품 등등), 어떠한 비즈니스 정책들을 정하는데 큰 도움이 될거라 싶어 실무에서는 플래그로 삭제 하지 않을까? 해서 전역으로 관리 하는게 좋겠다 싶었습니다. 근데 전역으로 저렇게 처리할 경우, 고객 정보같은 민감한 데이터는 실제로 삭제를 해줘야 할것 같은데 (회원 탈퇴시 같은 경우) 회원과 연관관계가 있는 엔티티들이 엄청나게 엮어 있을때 이런 경우는 어떻게 처리해야 좋을지 감이 잡히지 않습니다. 그래서 추가 질문으로는 Q4. 실무에서 softDelete를 어떤 엔티티에 적용하는지 Q5. 회원은 민감한 정보라 실제 삭제를 할때 관련된 연관관계가 있는 엔티티는 어떻게 처리하는게 좋을지 예를들면 member에 null값으로 그냥 냅두는지 이런 것들이 궁금합니다. 답변주시면 정말정말 감사드리겠습니다. 쿼리dsl 강의 듣기전에 datajpa로 이것저것 토이프로젝트를 해보면서 고민해보는데 생각보다 적용함에 있어 고려할것들이 넘쳐나 질문을 많이 하게되네요

  • JPA
  • spring-boot
  • java
  • spring
유승현 댓글 1 좋아요 7 조회수 2074

UsernamePasswordAuthenticationToken

해결됨

스프링 시큐리티

안녕하세요 강사님, 뜬금없는 질문이 될 수 있지만 그래도 궁금한 것은 여쭤보고 싶어 질문 합니다. CustomAuthenticationProvider가 사용하고자 하는 토큰 이름이 UsernamePasswordAuthenticationToken이라는 것은 외워야(기억해야) 하는 것인가요? 만약에 토큰 이름이 기억 안나면 어떻게 해야 하나요? 실제 프로젝트에서 개발할 때 이 흐름과 (클래스, 토큰등의) 이름 정도는 머리속에 다 있어야 하는 것인지 궁금합니다.

  • spring-boot
  • Spring Security
  • java
런런 댓글 1 좋아요 0 조회수 256

this.set~(~); vs set~(~); 차이

해결됨

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

제가 자바에 대해 완전히 이해하고 있지 않은지 this.를 붙이고 getter/setter를 쓰는 거와 그냥 바로 getter/setter를 쓰는 것, 이 두 개가 다른 가 싶더라구요 OrderItem에서 getItem().~~; 을 보면 그냥 getter를 썼는데 Order에서 this.setOrderStatus(~);를 보면 this를 붙인 후 seter를 써서 제가 아는 걸 쥐어짜내보면 둘 다 똑같을 것 같은 느낌이 들긴 하는데;; 뭐가 다른 건가요 ? class OrderItem{ .. public void cancel () { getItem () .addStockQuantity ( count ) ; } .. } class Order { .. public void cancel () { if ( delivery .getDeliveryStatus () != DeliveryStatus. READY) { throw new IllegalStateException ( " 이미 배송되었거나 배송중입니다 ." ) ; } this .setOrderStatus ( OrderStatus. CANCEL) ; for ( OrderItem orderItem : orderItemList ) { orderItem.cancel () ; } } .. } //아 또 갑자기 궁금한 게 생겼는데.. public class Order() { .. private OrderStatus orderStatus; .. public void cancel () { if ( delivery .getDeliveryStatus () != DeliveryStatus. READY) { throw new IllegalStateException ( " 이미 배송되었거나 배송중입니다 ." ) ; } this .setOrderStatus ( OrderStatus. CANCEL) ; for ( OrderItem orderItem : orderItemList ) { orderItem.cancel () ; } } .. } 에서 this.setOrderStatus(OrderStatus.CANCEL); 이 아니라 orderStatus = OrderStatus.CANCEL; 로 해도 프록시 조회의 문제를 제외하면 상관 없을까요 ? 혹시 모르니 set을 통한 방법을 만들어 두는 게 안전한 방법인가요 ? 뭔가 이 질문은 부끄러운 질문 같은데.. 올려봅니다..

  • spring-boot
  • java
  • 웹앱
  • JPA
  • spring
relate16 댓글 1 좋아요 0 조회수 313

유니크 데이터 조회시 list // optional

미해결

실전! 스프링 데이터 JPA

유니크 데이터 조회시 반환타입을 list // optional 이렇게 두개로 받을 수 있는데, 개인적으로는 optional의 경우 orElseThrow를 통해 예외를 던지거나 원하는 예외로 던질 수 있어 이쪽이 선호되는데 1. 반환타입은 사용하는 사람 취향일까요 아니면 좋은 방식이 있을까요? 2. 기본적으로 스프링이 던지는 예외를 사용하는게 좋을까요 커스텀으로 예외를 만들어 주는게 좋을까요? 답변주시면 감사드리겠습니다.

  • JPA
  • spring
  • java
  • spring-boot
유승현 댓글 1 좋아요 0 조회수 260

테이터 셋

해결됨

[개정판] 딥러닝 컴퓨터 비전 완벽 가이드

안녕하세요 교수님! 이 강의에서 yolov3의 데이터셋도 ms coco데이터로 pre trained 되어있고, 추가적인 다른 데이터셋은 추가하지않은 코드인가요?

  • keras
  • 딥러닝
  • 머신러닝 배워볼래요?
  • python
  • tensorflow
  • 컴퓨터-비전
leehoogwan 댓글 1 좋아요 0 조회수 210

안녕하세요! Exception 관련 질문드립니다!

미해결

실전! 스프링 데이터 JPA

안녕하세요! 6월 방학부터 개학한 오늘까지 김영한님의 모든 강의를 들으며 많은 깨달음을 얻고 실력을 키웠습니다. 먼저, 정말 좋은 강의를 해주셔서 감사하다는 말씀을 드립니다! 제가 질문드리고 싶은건 NoResultException입니다! JpaReopsitory<T,ID>를 상속받는 레포지토리는 Member findByUsername(String username) 를 하고 memberRepository.findByUsername("DB에 없는 username") 을 할시에 null이 들어가면서 exception이 터지지 않는데 MemberRepository.java public Member findByUsernmae (String username) { return em .createQuery( " select m from Member m where m.username=:username " , Member. class ) .setParameter( "username" , username) .getSingleResult() ; } memberJpaRepository.findByUsername("DB에 없는 값")을 할시에는 Exception이 터집니다. 먼저, Repository 내에서 NoResultException이 터지고 Repository에서 나갔을때는 EmptyResultDataAccessException이 터지는거에 궁금했었는데 이건 방금 강의에서 말씀해주셔서 아! 하고 알았습니다. 하지만, JpaRepository를 상속받은 레포지토리는 같은 쿼리를 날리지만 어떤 원리로 exception이 터지지 않고 null이 들어가는지 궁금합니다! 혹시, JpaRepository인터페이스를 구현한 클래스에서 Exception을 잡은다음에 null로 뿌려주는것일까요? 감사합니다!

  • spring
  • java
  • spring-boot
  • JPA
박상호 댓글 1 좋아요 0 조회수 318

경사 하강법 RSS 질문

미해결

[개정판] 파이썬 머신러닝 완벽 가이드

안녕하세요 파이썬 머신러닝 완벽가이드를 통해 잘 공부하고 있는 학생입니다. 다름이 아니고 경사하강법 파트를 공부하다 질문 사항이 생겨 글 남깁니다. 경사하강법의 원리를 배우며, 손실함수의 최저점을 찾기 위해 (손실함수 값이 낮아지는 방향성을 찾기 위해) R(w0,w1)에 대해 편미분을 하는 것은 이해했으나, w1(new) = w1(old) + n(보정계수)*(편미분값) w0(new) = w1(old) + n(보정계수)*(편미분값) w1,w0을 업데이트 하는 과정에서 왜 원래의 값에서 보정계수*편미분값을 빼게 되는 것인지 그 원리가 잘 이해되지 않습니다 ㅠㅠ 편미분은 대략 기울기, 변화량 정도를 의미하는데 .. 그 값에 보정계수를 곱하고, 원래 값에서 빼게 된 값이 그 기울기만큼 감소한 지점의 f(w) 함숫값(?)이 되는건지..? 그렇다면 왜 그렇게 되는 건지 궁금합니다 ㅠㅠ 제가 질문을 제대로 설명한 건지 모르겠네요. 강의 항상 잘듣고 있습니다. 감사합니다.

  • 경사하강법
  • 머신러닝 배워볼래요?
  • rss
  • 통계
  • python
90909090001 댓글 1 좋아요 0 조회수 525

22강 마지막 footer_button 폰트사이즈가 안바뀝니다.ㅠㅠㅠ

미해결

작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. <div class = "pragmatic_footer" > <div class = "pragmatic_footer_button" > <span> 공지사항 </span> | <span> 제휴문의 </span> | <span> 서비스 소개 </span> </div> <div style ="margin-top: 1rem;" > <h6 class = "pragmatic_logo" > Pragmatic </h6> </div> </div> ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ .pragmatic_logo{ font-family: 'Anton' , sans-serif; } .pragmatic_footer_button{ font-size: . 1 rem; } .pragmatic_footer{ text-align:center; margin-top: 2 rem; } .pragmatic_header{ text-align:center; margin: 2 rem 0 ; } ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ <!DOCTYPE html > <html lang ="ko" > {% include 'head.html' %} <body style ="font-family : NanumSquareR;" > {% include 'header.html' %} <hr> {% block content %} {% endblock %} <hr> {% include 'footer.html' %} </body> </html>

  • django
  • python
  • docker
이 원찬 댓글 4 좋아요 0 조회수 384

[Python] socketio 사용하여 영상스트리밍 시 추가 명령이 가능한지?

미해결

안녕하세요. 현재 파이썬 socketio 를 사용하여 서버-클라이언트를 구성하였는데요 클라이언트에서 카메라의 url 을 보내면 서버에서 카메라의 url 을 받아서 영상을 스트리밍하게 됩니다. 헌데 서버에서 영상을 스트리밍하게되면 서버가 계속 영상정보를 실행시켜서 추가적으로 클라이언트에서 정보를 전달을 못합니다.. (클라이언트에서 정보 보내면 socketio connection error 가 뜹니다) 혹시 이 사안에 대해서 추가적으로 정보를 보낼수 잇는 방법 아시는분이 계실까요? (궁극적으로 카메라가 켜졋다가 끄는 작업이 완료되어야하는데 켜지는건 되는데 끄는게 안됩니다ㅠ) 알려주시면 감사하겟습니다!!

  • python
  • socketio
  • opencv
  • streaming
Seho 댓글 0 좋아요 0 조회수 394

chapter3 소스코드

해결됨

스프링 시큐리티

안녕하세요 소스코드 관련해서 질문드립니다. chapter3 소스코드는 브랜치에 없는 것 같은데요. 다른 수강생분들은 어떻게 실습 하신 건지 알 수 있을까요? 따로 타이핑쳐서 공부하는 것은 당연한 것이지만 기본 소스가 없어서 어떻게 해야하는 지 답답하네요. chap4는 templates 밑에 구조가 다른 것 같더라구요. 강사님, chapter3소스 지금이라도 새로운 프로젝트로 제공해주실 수는 없으신가요?

  • java
  • spring-boot
  • Spring Security
런런 댓글 1 좋아요 0 조회수 309

예제파일 다운로드

미해결

프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)

sub 패키지를 얻으려고 2021~ 파일을 다운로드 해서 압축을 해제하는데 파일이 잘못됐다고 하네요. 강의 자료 폴더랑 python_basic 폴더가 다운 받아도 안에 아무것도 없네요 ..

  • python
댓글 1 좋아요 0 조회수 299

리스트 자료형에 *2를 했을 때는 id가 다르고 *=2를 했을 떄는 왜 id가 같은 건지 궁금합니다

미해결

우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)

안녕하세요 :) 강의 덕분에 다양한 문법을 알아가면서 파이썬의 이해도를 높이는 중입니다. 수업을 듣다가 질문이 생겼는데요. 리스트 자료형에 *2를 했을 때는 id가 다르고 *=2를 했을 떄는 왜 id가 같은 건지 궁금합니다 결국 같은 연산인데, 내부적으로 둘은 어떻게 동작하는건가요?

  • python
  • django
Ki Beom Kwon 댓글 2 좋아요 1 조회수 319

복잡한 통계쿼리도 JPA로 가능한가요?

미해결

스프링 데이터 JPA

기선님 쉽게 설명해주시는 강의를 보며 참 많은 도움이 되고있습니다. 실제 제가 만들고 있는 모델관 다르지만 질문하기 위해 예시를든다면 , 쇼핑몰을 예로 어떤 상품들이 있고 그것에 대한 판매가 이뤄진다고 가정할때 엔티티는 상품, 주문, 결제등이 있을수 있겠죠. 이때 '상품들의 월별 판매량'을 통계 내야 한다고 치고 --------------------------------------- 상품명 1월 2월 3월 4월 5월 ... 합 -------------------------------------- 상품A 20 15 4 7 8 104 상품B 1 1 10 2 1 25 ---------------------------------------- 이런식의 통계 쿼리를 짜야 할경우 JPA로 가능한지? QueryDSL 등을 써서라도 가능한지? 감이 안잡힙니다.

  • 통계
  • java
  • JPA
  • spring
시큐웨어 댓글 1 좋아요 2 조회수 5646

테이블 설계 관련 질문

미해결

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

프론트 엔드에서 전체 category를 조회해서, 화면에 카테고리를 선택할수 있도록 출력해주는 화면이 있고 유저가 게시글을 등록한다고 한다면 --- 1. 아래와 같이 Category 테이블에 모든 카테고리를 저장해 (init), 2. 이 리스트를 전달해주고, (미리 카테고리들은 정해져 있다고 할때, 추가도 할수 있겠지만) 3. user가 게시글을 등록할때 client가 입력한 category를 category table에서 찾아오고 4. 그 값을 기반으로 post와 postCategory에 저장해주는 방식이 되어야 하는거 같은데 (강의들중 어디에서 질문하는게 좋을지 약간 애매해서 여기에 글 올립니다.) ------ 이렇게 하는 방식이 맞을까요? 뭔가 동작 하게끔 할수 는 있는데 올바른 방법같지 않아서 영한님 다른강의들도 들어보면서 같이 몇일째 고민중인데 찜찜하고 명확하게 확신이 안섭니다. 카테고리 목록은 initService를 하나 만들어서 미리 저장해두었습니다. (강의에서 하신 initDb처럼) 답변주시면 감사드리겠습니다. 몇일째 해결이 안되요 ㅠㅠ post테이블의 CATEGORY_TAG는 삭제 예정입니다 public class Post { @Id @GeneratedValue @Column (name = "post_id" ) private Long id ; private String title ; @Lob private String desc ; private int price ; @Enumerated (EnumType. STRING ) private Status status ; @ManyToOne @JoinColumn (name = "account_id" ) private Account seller ; @OneToOne (cascade = CascadeType. ALL ) @JoinColumn (name = "post_category_id" ) private PostCategory postCategory ; // old @Enumerated (EnumType. STRING ) private CategoryTag categoryTag ; /*@OneToOne @JoinColumn(name = "category_id") private Category category;*/ public Post (String title , Account seller){ this . title = title ; this . seller = seller ; status = Status. NEW ; } // old public Post (String title , String desc , int price , CategoryTag categoryTag , Account seller){ this . title = title ; this . desc = desc ; this . price = price ; // @Converter this . categoryTag = categoryTag ; this . seller = seller ; status = Status. NEW ; seller.addPost( this ) ; } public Post (String title , String desc , int price , Account seller){ this . title = title ; this . desc = desc ; this . price = price ; // @Converter this . postCategory = postCategory ; this . seller = seller ; status = Status. NEW ; seller.addPost( this ) ; } //== 연관관계 메서드 ==/ public void setSeller (Account seller) { this . seller = seller ; seller.addPost( this ) ; } //== 바즈니스 로직 ==// // old public static Post post (String title , Account seller , CategoryTag categoryTag){ Post post = new Post(title , seller) ; post.setCategoryTag(categoryTag) ; return post ; } public void setPostCategory (PostCategory postCategory){ this . postCategory = postCategory ; postCategory.setPost( this ) ; } } @Entity @Setter @Getter public class PostCategory { @Id @GeneratedValue @Column (name = "post_category_id" ) private Long id ; @OneToOne (mappedBy = "postCategory" ) private Post post ; @OneToOne @JoinColumn (name = "category_id" ) private Category category ; } @Entity @Getter @Setter @NoArgsConstructor (access = AccessLevel. PROTECTED ) public class Category { @Id @GeneratedValue @Column (name= "category_id" ) private Long id ; @Enumerated (EnumType. STRING ) @Column (unique = true ) private CategoryTag categoryTag ; public Category (CategoryTag categoryTag){ this . categoryTag = categoryTag ; } } @PostMapping ( "/new2" ) public PostResponseDto postV2 ( @RequestBody PostRequestDto postRequestDto , @ApiIgnore HttpSession session){ Account account = getSessionCheckedAccount(session) ; Post post = new Post(postRequestDto.getTitle() , postRequestDto.getDesc() , postRequestDto.getPrice() , account) ; Category category = categoryJpaRepository .findByCategoryTag(postRequestDto.getCategoryTag()) ; PostCategory postCategory = new PostCategory() ; postCategory.setCategory(category) ; post.setPostCategory(postCategory) ; Long postId = postService .post(post) ; return new PostResponseDto(postId) ; }

  • JPA
  • spring
  • 웹앱
  • java
  • spring-boot
유승현 댓글 1 좋아요 0 조회수 336

인기 태그

인프런 TOP Writers

주간 인기글