묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
섹션4 필드와 컬럼매핑
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.메인 메서드 실행시 등록된 DB에 셀렉트 쿼리 조회하면저는 키값인 ID , , , , , 순으로 안나오고AGE, TESTLOCALDTAE, , ID 처럼 키값이 중간에 나옵니다...
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
단방향에서의 연관관계 주인 및 애노테이션
안녕하세요! 몇가지 궁금한게 있어서 질문드립니다. A -> B인 단방향에서 연관관계 주인은 A인가요? 단방향에서 양쪽 엔티티에 애노테이션(ex. @OneToOne)이 가능한걸로 알고있지만 필수로 적어줘야하는건 연관관계 주인쪽인가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계에서 JSON 변환 시 무한루프 문제 질문드립니다.
안녕하세요.스프링 시큐리티를 커스텀해서 이런저런 작업 중입니다.로그인 절차를 모두 통과화면 다음 코드에서 응답을 내려줍니다.Account account = (Account) authentication.getPrincipal(); response.setStatus(HttpStatus.OK.value()); response.setContentType(MediaType.APPLICATION_JSON_VALUE); objectMapper.writeValue(response.getWriter(), account);객체를 JSON으로 만드는 과정에서 무한루프가 발생해 스택오버플로우가 발생했습니다.왜냐하면 Account는 Roles라는 클래스를 알고 있고 Roles는 Account를 알고 있거든요(양방향). Roles는 Account, Role의 다대다 관계를 해소하긴 위한 중간 테이블입니다. Account에서 Roles 정보를 알고 있어야 하기 때문에 양방향 연관관계를 가지게 됐습니다.문득 어느 강의에서 엔티티를 노출하지 말라고 하셨던 게 생각이 났습니다. 검색을 해보니 객체를 json으로 만들 때 특정 객체를 하지 않는 어노테이션이 있는 것 같은데 저의 본능은 이걸 쓰지 말라고 하네요.별도의 반환 객체를 만들고 싶은데 이런 방법이 일반적인 건지 궁금합니다. 저의 사고 흐름도 올바른 건지 알고 싶습니다. account 객체에는 credential 정보도 있으니 필요한 정보만 담을 수 있는 반환용 객체를 만드는 게 맞을 것 같긴 한데 이런 사고흐름에 대한 검증 한 번 부탁드립니다. 그리고 이런 객체도 dto라고 해도 될까요?감사합니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
실전 예제 4번 클립에서 마지막 부분에 하신 말씀 질문입니다!
안녕하세요.11:03 경에 "이런 것들 json으로 말아넣자"라고 말씀하신 부분이요. 조금 더 풀어서 설명해주실 수 있을까요? 당장 이 프로세스가 필요해서는 아니지만 개념적으로라도 알고 있으려고 합니다!"이런 데이터"에 관해서도 조금 더 풀어서 말씀해주실 수 있을까요? 어떤 성격의 데이터들은 테이블이 아니라 json으로 관리할 수 있다는 것인지 조금 더 구체적으로 알고 싶습니다.감사합니다.
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
다시 강의를 보니 드는생각..
이메일 인증요청시간을 1시간으로 잡으셨는데인증할때마다 마지막인증요청 시간을 업데이트 쳐줘야 하는거 아닌가요 ???(/resend-confirm-email) 이 메서드를 실행 정상 했을때 마다
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
h2 연결 오류가 떠요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]h2 데이터 베이스를 새로 생성하면서 이름과 패스워드를 설정했는데강의대로 따라가다가 Error : Wrong user name or password가 떠요설정한 이름과 패스워드를 아예 없애는 방법이 있을까요?아니면 속성에 name과 password를 적는 방법을 알려주시면 감사하겠습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
h2 데이터베이스 설정관련
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]다름이 아니라 다른 프로젝트를 하면서 test라는 이름의 DB를 이미 만들어 놔서 그런지는 몰라도 이러한 오류가 뜨더군요 이게 이전에 만들어 놓은 test라는 이름의 db파일때문인지 궁금합니다 또한 제가 이전에 작업했던 프로젝트도 h2데이터 베이스를 사용하느라 test라는 주소로 연결토록했는데 이전 프로젝트의 application properties를 testDB이런식으로 이름을 바꿔주면 제가 지금 사용할때 test라는 이름으로 h2 데이터베이스를 사용할 수 있을까요? 마지막으로 이미 생성된 test라는 DB파일이 있다면 해당 디비로는 연결이 되면 안되는 건가요? 하나의 디비 파일 연결을 (물론 테이블의 구성요소가 다르겠지만) 다른곳에서 사용할 수 없는 걸까요? 질문 하다 보니 너무 길어진 점 죄송합니다.
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Editor....를 활용한 패턴에 질문있습니다.
당연히 구글링 해보셨져? 원하는 결과를 못찾으셨나요? 어떤 검색어를 입력했는지 알려주세문제가 발생한 코드(프로젝트)를 Github에 올리시고 링크를 알려주세요.Editor관련한 질문글들을 읽어보아도 제 머리로 이해가 안돼서 또 이렇게 Editor 질문 글을 하나 더 추가합니다... ㅠㅠ [해당 영상을 보지 않았더라면 짰을 코드]Post엔티티에 비즈니스 로직을 작성하고단순하게 PostEdit을 전부 넘겨 비즈니스 로직 change를 호출하여 더티체킹으로 마무리! 이렇게 했을 경우, 파라미터 순서에 무관하게 PostEdit이라는 수정을 위한 Dto 객체를 단 하나만 넘겨 수정을 할 수 있다고 판단했습니다. 물론 위 비즈니스 로직은 null값에 대처는 못하겠지만요! 하지만, 프론트 개발자와 상의하여 '수정 시, 모든 데이터를 넘겨준다는 전제' 에서는 가장 간단한 방법이라고 생각했습니다! [Editor를 작성해보며 느낀 의문점]Post의 toEdit을 통해 기존 가지고 있던 데이터를 PostEditor에게 넘김으로써 Builder에서 null값에 대응할 수 있다는 점 이외에는 또 다른 장점을 이해하지 못하고 있습니다. Request의 title혹은 content가 null일 경우 이를 해결하기 위한 방법을 제시해주는 것 말고는 되려 관리해야 할 것들만 늘어난 느낌이 해소가 되지 않습니다 ㅠㅠ 그래서 제가 이해한 것 까지의 내용들이 잘 이해한 것인지 그리고 추가적으로 제가 이해하지 못한 것들을 이해하고 싶습니다! findById로 수정하려는 엔티티를 가져옵니다.toEdit()을 통해 현재 수정하고자 하는 엔티티의 필드들을 PostEditor에게 넘겨 빌더를 만듭니다. 이는 수정하려는 엔티티가 현재 가지고 있는 필드들을 핸들링 할 수 있도록 해줍니다. (가령, title혹은 content의 null 처리)2번을 통해서 PostEditor가 현재 수정하려는 Post의 필드들을 주입 받았으면, Request로 받은 데이터를 통해 최종 build()를 해줍니다.변경사항을 모두 적용한 postEditor를 Post의 변경비즈니스 메서드 edit(postEditor)를 통해 더티체킹으로 변경해줍니다. [최종적으로 든 생각][Editor를 작성해보며 느낀 의문점] 에서 작성된 것들이 정확하다면,아예 첫 방법을 사용하되, 비즈니스 메서드에서 null 체크를 해주면 어떨까? 하는 생각이 들었습니다.이런 방식으로 진행한다면 문제가 있을까요? 긴 글에 시간 내어주셔서 감사합니다 !
-
미해결Practical Testing: 실용적인 테스트 가이드
OrderProduct 테스트에 대해
안녕하세요 강사님먼저 강의에 대해 너무 감사드린다는 말씀 드리고 싶습니다.강의 내용 중 OrderProduct를 생성하는 부분의 책임이 Order에 있게 설계하는 부분에 정말 매력을 느끼고, 유사한 설계 방법들에 대해 공부하려면 어떤 키워드를 알아보면 좋을까요??또한 이 강의를 따라 공부해서 개인적으로 진행중인 프로젝트에 적용하면서 공부하고 있는데, 딱 Order와 OrderProduct같은 관계에서 OrderProduct를 강의에서처럼 생성자가 아닌 정적 팩토리 메소드를 통해 만들어보고자 하였습니다.하지만 여기에서 OrderProdcut의 정적 팩토리 메소드를 테스트하려면 Order가 필요하고, Order를 create하려면 또 OrderProduct가 내부에서 만들어지는 문제가 발생했습니다.이런 경우는 어떻게 해결할 수 있을까요??임의로 Order에 대해 mock으로 생성해서 해결하고는 있는데, 이게 일반적인 방법이 될 수 있을까요?감사합니다!!
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
멤버와 팀의 영속화 순서를 뒤집었을 때(?) 생성되는 query에 대한 질문입니다!
안녕하세요.이상한 코드이긴 하지만 문득 궁금해서 테스트를 해봤습니다.하이버네이트 버전은 6.4.2.Finalh2 데이터베이스 버전은 2.2.224 Team team = new Team(); team.setName("teamA"); Member member = new Member(); member.setUsername("memberA"); member.setAge(49); member.setTeam(team); em.persist(member); em.persist(team);이 경우 발생하는 query는 다음과 같습니다.Hibernate: /* insert for hellojpa.jpql.Member */ insert into Member (age, TEAM_ID, username, id) values (?, ?, ?, ?) Hibernate: /* insert for hellojpa.jpql.Team */ insert into Team (name, id) values (?, ?) Hibernate: /* update for hellojpa.jpql.Member */ update Member set age=?, TEAM_ID=?, username=? where id=?제가 생각한 흐름은 이렇습니다.멤버가 데이터베이스에 동기화된다팀이 멤버에 저장되어 있지만(객체 상으로), 팀 테이블에는 해당 데이터가 없다멤버의 외래키(team_id)가 아직 null이다팀이 데이터베이스에 동기화된다이제 멤버의 외래키를 업데이트 한다외래키만 업데이트 하면 될 것 같은데 외래키를 가진 레코드 전부를 수정한다이 흐름이 맞을까요? 외래키만 업데이트 하는 게 아니라 멤버의 해당 레코드를 전부 업데이트하는 게 생각했던 것과 달라 질문드리게 됐습니다.답변 미리 감사드립니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티 매핑 오류 - 실전 예제1
섹션 4 - 엔티티 매핑 에서 실전예제1 관련 질문입니다. 강사님께서 jpashop 프로젝트를 하고 계신데 저도 열심히 따라 하고 있었습니다. 근데 지금 H2 가 연결이 계속 안된다라고 뜨는데 혹시 이유 아시는 분 계실까요.......ㅠㅠㅠㅠ사진 첨부하겠습니다.제발 꼭 좀 도와주세요ㅜㅜㅜ!!!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
콘솔에 쿼리가 지저분하게 나오는 문제.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.인텔리제이 콘솔창에 쿼리가 이런식으로 지저분하게 보입니다.yml 설정은 이렇게 되어있고요.jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true format_sql: true logging: level: org.hibernate.SQL: debug # org.hibernate.type: trace log4j jdbc 설정하는 쪽으로 일단 구글링해서시도해보고 있긴한데, 잘안되네요.혹시 다른 방법이 있을까요
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
페이징과 한계 돌파의 batch_size에 대해
밑줄 친 부분은 yml에 batch_size에 의해 조정되는 것 같습니다(맞는지 모르겠습니다). 근데 저는 그런데 영한님 쿼리는 저 부분에 4,11이 들어가있는 이유가 궁금해요. 저는 저 부분이(?,?,?,?,?,?,?,?,?)가 되어서 그런지 몰라도 h2에서 쿼리할때 에러가 뜹니다.(밑사진)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
api
api란 개념을 잘 모르겠습니다.그냥 controller에서 mapping하는 것이 api 인가요?1편에서 만들었던@GetMapping("/members/new")public String createForm(Model model) {...}이런 코드들도 각각 api라 하는 것인가요?
-
해결됨실전! Querydsl
Querydsl 조회 시, DTO 필드를 List로 받는 방법을 알고 싶습니다.
안녕하세요.Querydsl 학습 중에 궁금한 점이 있어서 질문드립니다. Projection을 이용해서 조회 데이터를 DTO에 반환 받고 싶습니다.하지만, DTO 필드에 List 타입이 정의되어 있습니다.이런 경우에는 어떤식으로 데이터를 조회할 수 있는지 궁금합니다. 또한, 현업에서는 이런 형태의 데이터를 조회하기 위해서 어떤 방식으로 하는지 궁금합니다.객체 그래프 탐색을 이용한 Lazy 조회 후, 로직에서 조건 필터링 ?각 조건에 맞는 쿼리 여러번 호출 ?DTO Projection을 이용한 한방 쿼리 ?다른 방식 ? 조회 데이터를 반환 받기 위한 ProductDto는 다음과 같습니다.public record ProductDto( Long id, String name, int reviewScore, int reviewCount, int originalPrice, int salesPrice, List<String> productImages, List<String> productDetailImages ) { @QueryProjection public ProductDto { } } 데이터를 조회 하고자 하는 의도가 담긴 Querydsl은 다음과 같습니다.public ProductDto findSellingProductById(Long id) { return queryFactory .select(new QProductDto( product.id, product.name, product.reviewScore, product.reviewCount, productOption.originalPrice, productOption.salesPrice, productImage.imageUrl, productDetailImage.imageUrl )) .from(product) .leftJoin(product.productOptions, productOption) .on(productOption.isDefault.isTrue(), productOption.isSaleable.isTrue(), productOption.isDeleted.isFalse()) .leftJoin(product.productImages, productImage) .on(productImage.isDeleted.isFalse()) .leftJoin(product.productDetailImages, productDetailImage) .on(productDetailImage.isDeleted.isFalse()) .where(product.id.eq(id)) .fetchOne(); } Product, ProductOption, ProductImage, ProductDetailImage 엔티티는 다음과 같습니다.@Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Product extends BaseDateTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "product_id") private Long id; @Column(length = 50) private String name; private int reviewScore; private int reviewCount; // ... 중략 @OneToMany(mappedBy = "product", cascade = CascadeType.ALL) private List<ProductImage> productImages = new ArrayList<>(); @OneToMany(mappedBy = "product", cascade = CascadeType.ALL) private List<ProductDetailImage> productDetailImages = new ArrayList<>(); @OneToMany(mappedBy = "product", cascade = CascadeType.ALL) private List<ProductOption> productOptions = new ArrayList<>(); // ... 중략 } @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class ProductOption extends BaseDateTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "product_option_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "product_id") private Product product; @Column(length = 30) private String name; private int originalPrice; private int salesPrice; // ... 중략 private Boolean isDefault; private Boolean isSaleable; private Boolean isDeleted; // ... 중략 } @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class ProductImage extends BaseDateTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "product_image_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "product_id") private Product product; private String imageUrl; private Boolean isDeleted; // ... 중략 } @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class ProductDetailImage extends BaseDateTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "product_detail_image_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "product_id") private Product product; private String imageUrl; private Boolean isDeleted; // .. 중략 } 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberServiceTest에서 오류가 나는데 도와주세요 ㅠㅠ
<MemberService code><MemberRepository code><build.gradle><Error Messeage>어디가 문제일까요?감사합니다~~ㅜㅠㅠㅜㅠ 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
cascadetype.remove와 orpphanRemoval = true
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 제가 강의 복습 겸 혼자 개발을 하다가 궁금한점이 생겨 질문드립니다. cascadetype.remove를 설정하면 부모 엔티티가 삭제되면 자식 엔티티도 삭제되는 것이라고 알고 있습니다. 그래서 cascadetype.remove를 설정하고 부모 객체를 삭제했더니 delete 쿼리가 나가지 않았는데, 여기에 더해 orphanRemoval=True까지 설정해줬더니 delete쿼리가 나가서 부모엔티티와 자식엔티티를 모두 삭제해주었습니다.제가 잘못알고 있는 것인지 아니면 왜 두 가지 모두를 설정해줘야 delete쿼리가 나가는지 궁금해서 여쭤봅니다. @Entity @RequiredArgsConstructor @Setter @Getter public class Restaurant { @Id @GeneratedValue private Long restaurantId; @Column(unique = true) private String name; private mealoralcohol meal_alcohol; private URL url; private int saturdayopentime; private int sundayopentime; private int maxNumOfPeople; private int averagePrice; @OneToMany(mappedBy = "restaurant") private List<MenuRestaurant> menuRestaurants = new ArrayList<>(); } @Entity @RequiredArgsConstructor @Getter @Setter public class MenuRestaurant { @Id @GeneratedValue private Long menuRestaurantid; private mealtype mealtype; @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "restaurantId") private Restaurant restaurant; public void setRestaurant(Restaurant restaurant){ this.restaurant = restaurant; restaurant.getMenuRestaurants().add(this); } } @Repository @RequiredArgsConstructor public class RestaurantRepository { private final EntityManager em; public void save(Restaurant restaurant){ em.persist(restaurant); } public Restaurant findById(Long id){ return em.find(Restaurant.class,id); } public void delete(Restaurant restaurant){ Assert.notNull(restaurant,"Entity must not be null!"); if (em.contains(restaurant)){ em.remove(restaurant); } } } @RunWith(SpringRunner.class) @SpringBootTest @Transactional public class RestaurantRepositoryTest { @Autowired RestaurantRepository rr; @Autowired EntityManager em; @Test @Rollback(false) public void testJPQL() throws Exception{ Restaurant res1 = new Restaurant(); res1.setName("res1"); res1.setAveragePrice(10000); res1.setSaturdayopentime(17); res1.setSundayopentime(17); res1.setMaxNumOfPeople(29); res1.setMeal_alcohol(mealoralcohol.Meal); em.persist(res1); MenuRestaurant menures1 = new MenuRestaurant(); em.persist(menures1); menures1.setRestaurant(res1); menures1.setMealtype(mealtype.Korean); // heavyres1 MenuRestaurant menures2 = new MenuRestaurant(); em.persist(menures2); menures2.setRestaurant(res1); menures2.setMealtype(mealtype.heavy); // japaneseres2 MenuRestaurant menures3 = new MenuRestaurant(); em.persist(menures3); menures3.setRestaurant(res2); menures3.setMealtype(mealtype.Japanese); rr.delete(res1); } } 여기서 rr.delete(res1)을 했을 때, Restaurant 클래스의 orphanRemoval=True 설정을 없애면 delete쿼리가 나가지 않습니다.
-
미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
TestEntityApi중 createTestEntity에서 질문있습니다
testService.create(request.getName(), request.getAge());를testService.create(request.name, request.age)로 바꿔도 작동하는데 혹시 차이점이 있나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 오류
[질문 내용]복습 중 테스트 오류가 났는데 이유를 모르겠습니다..entityrepositoryapplication.ymltestbuild.gradletest code하기 전에 main()을 run 했을 때는 제대로 실행되고 h2 웹 콘솔에서도 Member 테이블이 생긴 것을 확인했습니다. 그런데 테스트 코드를 실행하면 아래와 같은 에러가 뜹니다.. 도움 부탁드립니다! 에러
-
미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
리프레시 토큰 사용 관련 문의 건
강사님 안녕하세요 :)강의 관련하여 문의 드립니다. 현재 강의 내용에선 액세스 토큰과 리프레시 토큰을 DTO에 담아 서버에서 클라이언트로 전달하고 있습니다.1) 이 경우, 사용자 또한 네트워크 탭에서 전달되는 토큰을 모두 확인할 수 있는건가요? 보안 문제는 없을지요?2) 프로젝트에 리프레시 토큰을 적용하는 중인데, 위 사항을 감안하고도 DTO로 전달하는 방식으로 진행해도 될지요? 또한 이 경우가 가장 일반적인 경우일지요?3) 만약 액세스 토큰은 쿠키에 담아 웹브라우저가 컨트롤하게 하고,리프레시 토큰만 서버에서 DTO에 담아 전달하는 방식은 어떤지요? 프로젝트 진행 기준으로 안내주시면 참고하여 진행하도록 하겠습니다. :)