묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
참조에 관해 질문드립니다
A->B->C 로 참조가 되어 있어서 A를 지우려면 B를 먼저 삭제하고 B를 지우려면 C가 먼저 삭제되어져야 한다고 했을 때, 만약 C가 A를 참조하게 될 경우 싸이클이 생겨서 서로 삭제가 안되는 문제가 생기는데인. 웹던이나 DB단에서 c->a로 참조를 걸려할 때 잘못된 것으로 인지하고 막고 싶은데. 보통 이럴때는 어떤식으로 해결을 해야하나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Controller에서 Repository 를 직접 사용할 때.
간단한 조회는 Controller 에서 직접 Repository 를 사용하기도 한다. 라는 설명에 대한 질문입니다. 예제에서는 모든 Transaction 이 Service layer 에서 관리되는데 Controller에서 직접 Repository 를 접근할 때에는 tx 가 암묵적으로 생성되는 것인가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원기능 테스트 - insert 안나가는 이유
안녕하세요? 회원기능 테스트 강의 중 질문드립니다. @Trnasactional이 적용된 @Test에서 persist를 해도 DB에 안나간다고 하셨는데 이는 H2 DB에서만 그런건가요? MySQL도 그런가요? H2의 경우 sequence를 이용해 @GeneratedValue를 관리하는데 (로그 보면), MySQL의 경우는 auto_increment를 사용하면 DB에 한번 다녀와야 (flush되어야 = insert가 나가야) member의 id를 알 수 있는게 아닌가 해서요. 비슷한 사례(?)로 Spring Data JPA에서 .save(entity)만 해도 flush 되서 insert 쿼리가 나가는 것처럼요. 강의 잘 보고 있습니다! 답변 미리 감사드립니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원기능 테스트에서 질문드립니다.
dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' compile('com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.7') compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test'} spring: datasource: url: jdbc:h2:tcp://localhost/~/Dev/projects/book/db;MVCC=TRUE username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: show_sql: true format_sql: truelogging: level: org.hibernate.SQL: debug org.hibernate.type: trace package com.ym.book.shop.service;import com.ym.book.shop.domain.entity.Member;import com.ym.book.shop.repository.MemberRepository;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import org.springframework.transaction.annotation.Transactional;import static org.junit.Assert.*;@RunWith(SpringRunner.class)@SpringBootTest@Transactionalpublic class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입()throws Exception{ //given Member member = new Member(); member.setName("Kim"); //when Long saveId = memberService.join(member); //then assertEquals(member, memberRepository.findOne(saveId)); } @Test public void 중복_회원_예외()throws Exception{ //given //when //then }}결과 :2019-10-06 14:52:56.074 INFO 2244 --- [ Test worker] o.h.h.i.QueryTranslatorFactoryInitiator : HHH000397: Using ASTQueryTranslatorFactory 2019-10-06 14:52:56.173 DEBUG 2244 --- [ Test worker] org.hibernate.SQL : select member0_.member_id as member_i1_4_, member0_.city as city2_4_, member0_.street as street3_4_, member0_.zipcode as zipcode4_4_, member0_.name as name5_4_ from member member0_ where member0_.name=? Hibernate: select member0_.member_id as member_i1_4_, member0_.city as city2_4_, member0_.street as street3_4_, member0_.zipcode as zipcode4_4_, member0_.name as name5_4_ from member member0_ where member0_.name=? 2019-10-06 14:52:56.204 DEBUG 2244 --- [ Test worker] org.hibernate.SQL : insert into member (member_id, city, street, zipcode, name) values (null, ?, ?, ?, ?) Hibernate: insert into member (member_id, city, street, zipcode, name) values (null, ?, ?, ?, ?) 2019-10-06 14:52:56.216 INFO 2244 --- [ Test worker] o.s.t.c.transaction.TransactionContext : Rolled back transaction for test: [DefaultTestContext@4d40c3e testClass = MemberServiceTest, testInstance = com.ym.book.shop.service.MemberServiceTest@b322034, testMethod = 회원가입@MemberServiceTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@1ee9b049 testClass = MemberServiceTest, locations = '{}', classes = '{class com.ym.book.shop.ShopApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@275315df, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@47bf348f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@7db5eaa6, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@2cda0ac3], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true]] 2019-10-06 14:52:56.223 INFO 2244 --- [ Thread-6] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor' 2019-10-06 14:52:56.223 INFO 2244 --- [ Thread-6] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2019-10-06 14:52:56.226 INFO 2244 --- [ Thread-6] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2019-10-06 14:52:56.231 INFO 2244 --- [ Thread-6] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. BUILD SUCCESSFUL in 5s 5 actionable tasks: 3 executed, 2 up-to-date 2:52:56 PM: Tasks execution finished ':cleanTest :test --tests "com.ym.book.shop.service.MemberServiceTest.회원가입"'.이렇게 결과가 나옵니다.select, insert가 2번씩 실행이 되는데요혹시 제가 설정이 잘못된 게 있을까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
DB Insert할 때 질문입니다.
회원 서비스 개발에서 validateDuplicateMember를 할 때에 동시에 회원가입이 이루어질 때 방지로 name에 유니크를 걸어 주신다고 했는데 이해가 잘 되지를 않습니다. 보통 이름이 같은 사람도 많은데 name 에 unique를 주어도 되는건지 궁금하고요. 동시에 일어났을 때 방지하는 법에 대해 좀 더 자세히 알고 싶습니다~
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
fetch join 시 paging 문제
fetch join시에 distinct를 해도 JPA의 어플리케이션 레벨에서 distinct를 해준다고 하셨는데, paging을 할 경우 제대로 paging이 되는지 궁금합니다~
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
아크 관계의 경우 JPA에서 어떤 식으로 매핑 해야 하나요?
안녕하세요 김영한님 강의 너무 재미있게 잘 보고 있습니다. 소개 영상에서 JPA 약을 어쩜 그렇게 잘 파시던지.. 보면서 "그래 이게 내가 원하는 세상이야" 하고 바로 결제하여 재밌게 보고 있습니다. 물론 책도 구매하여 모니터 받침으로 잘 쓰고 있습니다. ^^b 한 가지 궁금한게 있는데, 아크 관계의 경우에서는 JPA에서 어떻게 처리해야 될지 잘 모르겠습니다. 아크 관계가 실무에서 굉장히 빈번하게 쓰인다고 하는데, 우형에서는 아크 관계를 JPA로 어떻게 매핑 하여 처리하고 계신지 답변해 주시면 감사드리겠습니다.^^
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@ManyToOne, @OneToMany연관관계 조회 시 순환참조가 일어나는 부분은 어떻게 해결하여야 하나요?
안녕하세요!다름이아니라 제가 수업을 따라해보던 중 @ManyToOne, @OneToMany으로 연관관계를 맺은 두개의 테이블을 조회 시 아래와 같은 에러를 확인하였습니다.@Entity @Table(name = "MEMBER") @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") Long id; @Column(name = "NAME") String name; @OneToMany(mappedBy = "member") List<Post> posts = new ArrayList<>(); } @Entity @Table(name = "POST") @Getter @Setter public class Post { @Id @GeneratedValue @Column(name = "POST_ID") Long id; String title; String description; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "MEMBER_ID") Member member; }Could not write JSON: Infinite recursion (StackOverflowError);제 생각에는 한쪽에서 다른쪽 테이블을 조회 시 순환참조가 일어나는것 같다고 생각하는데 이러한 경우에는 어떻게 처리를 하여야 하는지 궁금합니다.찾아보니 @JsonIgnore를 사용하는 방법이 있는것 같기는한데 올바른 방법이 아닌것 같아서 여쭈어봅니다.좋은강의 감사합니다!
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
DTO관련 질뮨드립니다
Member란 엔터티에 컬럼 a, b, c, d가 있습니다 selectA 는 a,b 를 보여주고 selectB 는 b, a를 불러주고 selectC는 a,b,c를 불러온다고 가정하였을 때 1. select A, B, C 에 대해서 다 DTO객체를 만들어주는 것이 괜찮을까요? 2. select A, B는 컬럼 순서만 다를뿐인데 하나의 DTO로 리턴해줄 때 순서를 바꿔줄 수 있나요? 3. 아님 a, b, c를 포함한 DTO를 만들어서 사용하는것이 나을까요? 이렇게하면 라턴해줄 때 null값( selectA를 호출한다면 필드c 가 null값) 생기어서요(프론트엔드 입장에서는 사용할 필드만 보고 싶어질수도 있을거같아서요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
./h2.sh 실행시 퍼미션 에러가 뜨네요..^^ 참고하세요
-bash: ./h2.sh: Permission denied bin 폴더 경로에 가셔서 터미널 여시고 chmod 755 h2.sh <-- 입력하시면 됩니다. 참고로 터미널에서는 h2 DB 종료 단축키는 control + c 입니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Group By가 필요할 때 JPA에서는 새로운 DTO 클래스를 만들어서 결과를 담으시나요?
실무에서 여러 테이블 조인하고 group by까지 해야할 때 ,기존의 엔티티 클래스말고 새로운 DTO 같은 클래스를 만들어서 결과를 받으시나요? 업무적으로 group by가 필요한 부분들은 어떻게 처리하시는지 궁금하네요. 기존의 엔티티로는 힘들어 보여서요.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
Group By질문드립니다.
활용편에서 나올 내용같은데 공부하다 궁금해서 문의드립니다. ㅠㅠ querydsl을 적용중이고 A Table year name value 2019 a 10 2019 b 11 2019 c 11 2020 d 9 2020 e 20 이 있을 때 , year로 그룹핑해서 value가 맥스인값을 보여주고 싶습니다. 2019 (b,11) , (c,11) 2020 (e, 20) 이렇게 값을 가져오게 하고 싶습니다. 최종적으로는 (b,11) (c,11)(e,20)로 출력하고 싶습니다. List<a>로 받고 싶습니다. 년도순, 이름순으로 값을 저장하고 싶습니다. a는 Qa를 a로 받은 것입니다. JPAQueryFactory.from(a).transform(groupBy(a.year).as(list(a))); 저는 이정도에서 더이상 진도가 안나네요. ㅠㅠ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JAVA11 - javax.xml.bind.JAXBException 에러
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException JAVA11 에서 에러가 발생하네요 <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version> </dependency> pom.xml에 해당 내용 추가하여 에러 없엤습니다 ㅎㅎ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
여러대 서버에서 사용하는 엔티티가 벌크 연산되는 경우 질문 드립니다.
아래와 같은 상황인 경우에, 어떤방식으로 엔티티들의 영속성을 유지할수 있을까요? - JPA 를 사용하는 API 서버 10대 - JPA 를 사용하는 BATCH 서버 2대 상황 - API 서버 몇개에서, BATCH에서 업데이트 될 엔티티가 영속 상태 - BATCH 서버에서 벌크 연산 수행 위와 같은 경우에 API 서버에서 엔티티들을 어떻게 관리해야하는지 궁금합니다.
-
미해결더 자바, 코드를 조작하는 다양한 방법
제네릭을 쓰는 클래스 생성방법은 없나요?
안녕하세요. 강좌 잘 보고 있습니다. 강좌를 보고 실습하고 있는데요. 제가 좀 변태적인 취향인지라... 제네릭한 클래스를 newInstance 를 이용해서 생성하려고 하는데요. 어떻게 해야할지 도통 감이 안잡히네요.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
Entity 클래스의 역할
안녕하세요. 강사님! 엔티티 클래스가 역할과 책임을 가지고 주도적으로 일을 하는 클래스가 되어야 할까요 아니면 그저 DTO 같은 데이터 저장소로써 역할만 하는것이 나은지 궁금합니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
h2 디비 연결시..
안녕하세요. h2 설치 후 연결 해보면 Database "C:/Users/HA/test" not found, and IFEXISTS=true, so we cant auto-create it [90146-199] 90146/90146 에러가 나면서 연결이 안되는데 연결 테스트 하기전에 따로 설정해야 할것이 있나요? 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
안녕하세요 좋은 강의 감사합니다!
JPQL쿼리 실행 시 플러시가 자동으로 되는데 그렇다면 JPQL은 1차 캐시를 먼저 조회하지 않는 건가요?
-
미해결스프링 데이터 JPA
JsonPathResultMatchers -> ResultMatcher
(혹시라도 Java 8이 아닌 상위버전으로 학습하시는 분들을 위하여...) 28. 스프링 데이터 Common: Web 2부 마지막 부분에 나오는 test 코드 중에 ``` .andExpect(jsonPath("$.content[0].title", is("bbb"))) ``` 부분을 아래와 같이 수정해야 할 것 같습니다. ``` .andExpect(result -> { jsonPath("$.content[0].title", is("bbb")); }); ``` Java 버전이 올라가면서 변경된 부분인 것 같아요. .andExpect가 ResultMatcher만 파라미터로 받는 것 같네요.
-
미해결스프링 데이터 JPA
기본 Repository 커스터마이징 했을 경우.. 질문 있습니다.
강사님이 알려주신 방법인 SimpleRepository를 QuerydslJpaRepository로 변경하지 않아도... 테스트가 성공합니다. 혹시 스프링 버전 변경에 따라서 변경된것인지저의 프로젝트에 무언가 오류가 있는것인지 .. 궁금합니다. 현재 제 스프링 버전은 5.1.6 부트 버전은 2.1.4 입니다.