묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Unable to build Hibernate SessionFactory오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]10월 16, 2023 11:17:27 오후 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformationINFO: HHH000204: Processing PersistenceUnitInfo [name: hello]10월 16, 2023 11:17:27 오후 org.hibernate.Version logVersionINFO: HHH000412: Hibernate ORM core version 6.3.0.Final10월 16, 2023 11:17:27 오후 org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl lambda$normalizeConnectionAccessUserAndPass$6WARN: HHH90000021: Encountered deprecated setting [javax.persistence.jdbc.user], use [jakarta.persistence.jdbc.user] instead10월 16, 2023 11:17:27 오후 org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl lambda$normalizeConnectionAccessUserAndPass$12WARN: HHH90000021: Encountered deprecated setting [javax.persistence.jdbc.password], use [jakarta.persistence.jdbc.password] instead10월 16, 2023 11:17:27 오후 org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl normalizeDataAccessWARN: HHH90000021: Encountered deprecated setting [javax.persistence.jdbc.url], use [jakarta.persistence.jdbc.url] instead10월 16, 2023 11:17:27 오후 org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl normalizeDataAccessWARN: HHH90000021: Encountered deprecated setting [javax.persistence.jdbc.driver], use [jakarta.persistence.jdbc.driver] instead10월 16, 2023 11:17:27 오후 org.hibernate.cache.internal.RegionFactoryInitiator initiateServiceINFO: HHH000026: Second-level cache disabled10월 16, 2023 11:17:27 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configureWARN: HHH10001002: Using built-in connection pool (not intended for production use)10월 16, 2023 11:17:27 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001005: Loaded JDBC driver class: org.h2.Driver10월 16, 2023 11:17:27 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001012: Connecting with JDBC URL [jdbc:h2:tcp://localhost/~/jpashop]10월 16, 2023 11:17:27 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001001: Connection properties: {password=****, user=sa}10월 16, 2023 11:17:27 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001003: Autocommit mode: false10월 16, 2023 11:17:27 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>INFO: HHH10001115: Connection pool size: 20 (min=1)10월 16, 2023 11:17:27 오후 org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl constructDialectWARN: HHH90000025: H2Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)10월 16, 2023 11:17:29 오후 org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateServiceINFO: HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)10월 16, 2023 11:17:29 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnectionINFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@5dc769f9] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.10월 16, 2023 11:17:29 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptionsWARN: SQL Error: 42122, SQLState: 42S2210월 16, 2023 11:17:29 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptionsERROR: Column "start_value" not found [42122-214]10월 16, 2023 11:17:29 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stopINFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/jpashop]Exception in thread "main" jakarta.persistence.PersistenceException: [PersistenceUnit: hello] Unable to build Hibernate SessionFactory at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1563) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1484) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:55) at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:80) at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) at jpashose.jpashop.JpaMain.main(JpaMain.java:12)Caused by: org.hibernate.exception.SQLGrammarException: Unable to build DatabaseInformation [Column "start_value" not found [42122-214]] [n/a] at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:66) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:58) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94) at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:194) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:98) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:286) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:145) at java.base/java.util.HashMap.forEach(HashMap.java:1337) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:142) at org.hibernate.boot.internal.SessionFactoryObserverForSchemaExport.sessionFactoryCreated(SessionFactoryObserverForSchemaExport.java:37) at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:295) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:450) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1479) ... 4 moreCaused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "start_value" not found [42122-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) at org.h2.message.DbException.get(DbException.java:223) at org.h2.message.DbException.get(DbException.java:199) at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) at org.h2.jdbc.JdbcResultSet.getLong(JdbcResultSet.java:745) at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.resultSetStartValueSize(SequenceInformationExtractorLegacyImpl.java:110) at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.lambda$extractMetadata$0(SequenceInformationExtractorLegacyImpl.java:54) at org.hibernate.tool.schema.extract.spi.ExtractionContext.getQueryResults(ExtractionContext.java:50) at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:39) at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.initializeSequences(DatabaseInformationImpl.java:66) at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.<init>(DatabaseInformationImpl.java:60) at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:185) ... 14 moreh2설정후 main돌려보면 자꾸 이런식으로 뜹니다 재설치도 많이해봤고 강의와 같은버젼으로 돌렸는데도 오류가 발생하는데왜이러죠 >?? public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");EntityManager em = emf.createEntityManager();EntityTransaction tx = em.getTransaction();tx.begin();try { tx.commit(); } catch (Exception e) { tx.rollback();}finally {em.close();} emf.close();}} 이건 main코드입니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Cannot resolve method 'assertThat' in 'Assertions' 해결법
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]testMember을 할 때 Assertion.assertThat을 하면 asserThat에서 빨간 밑줄이 뜹니다. 에러 내용은 Cannot resolve method 'assertThat' in 'Assertions'입니다. 질문들도 찾아보고 인터넷 해결법들도 시도해봤으나, 잘 맞지 않네요. 최대한 수업자료 따라가고 있는데, 하란 것들도 다 세팅했습니다. 유일하게 다른 점은 스프링부트의 버전인데, 공식 사이트에서 2.7 버전까지 밖에 안 떠서 2.7.16버전으로 시작했습니다. gradle세팅도 다 맞췄고요. 결과적으로 저는 그냥 Assertions.asserEquals를 사용하는 것으로 해결했습니다. 저랑 비슷한 문제 겪으시는 분들은 이렇게 하셔도 될 듯합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
버전 오류
현재 하이버네이트와 H2데이터베이스 버전 설정오류가 뜹니다.해결 방법을 알 수 있을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
다대다 관계의 주인
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 8분20초 다대다 관계 설명을 듣다 궁금한점이 생겨 질문 올립니다. 다대다 양방향 관계에서는 주인을 어떤 원리로 정하는 것인가요?? 강사님께서 items 를 다대다 양방향 연관관계의 주인으로 설정하셨는데 그 원리가 궁금합니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
jpa 시작하기 애플리케이션 개발 부분
제가 지금 jpamain 을 추가하고 실행을 시켰는데 해당 에러가 뜹니다
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
에러 처리 궁금한점
안녕하세요현재는 각 도메인에서 서킷브레이커를 적용했는대,api-gateaway에서는 처리를 해줄 수 없을까요?(공통적으로)현재는 도메인수가 적지만 만약에 라우팅 될 도메인들이 10개 이상 넘어가면 공통적으로 처리할 수 있는 것도 필요해보여서요. (어느 도메인으로 라우팅될조 모르지만)
-
미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
1-6 생성자 오류
TestRequestBody 부분을 똑같이 작성했는데No Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator.라고 오류가 생성돼서 아래처럼 코드를 바꿨더니 실행이되는데 이유를 모르겠습니다public static class TestRequestBody { String name; Integer age; public void setName(String name) { this.name = name; } public void setAge(Integer age) { this.age = age; } public TestRequestBody () {} //Request Body 방식을 사용하기 위해서는 생성자를 꼭 만들어야한다 // public TestRequestBody(String name, Integer age) { // this.name = name; // this.age = age; // } }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
현재 영상이 안나오는거같은데 나오나요?
다른 학습목록은 재생이 잘되는데 여기부분만안나오는데 저만안나오는걸까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]외래키 관련해서 질문을 드리고 싶은게 @JointoColumn을 통해 연관관계의 주인을 정하는건 알겠습니다. 그런데 다른 경우에는 mappedBy를 적은것과 다르게 24:18에 OrderItem과 Item과의 연결에선 mappedBy를 적지 않은게 좀 헷갈립니다. 여기선 쓰지 않는 이유가 뭔가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
예외처리
안녕하세요. 문득 궁금한 점이 생겼는대요..주문이 성공하고나서 카탈로그 쪽에서 장애가 발생해서 롤백을 해야한다고 했을 때는 처리방안이 어떻게 되나요??찾아보니까 사가패턴 ? 이런거 사용하는것으로 보이는대, 다른 방안도 있을까요? (처리가 좀 어렵네요)
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Validation Map으로 구현된걸 List로 바꿔봤는데 이 방식이 맞을까요?
이렇게 바꿔봤는데 Body = {"code":"400","message":"잘못된 요청입니다.","validation":[{"fieldName":"content","errorMessage":"내용을 입력해주세요"},{"fieldName":"title","errorMessage":"제목 을 입력해주세요"}]} 이렇게 배열로 응답이 갈수있게 바꿔봤는데 괜찮을까요?
-
미해결실전! 스프링 데이터 JPA
쿼리메서드 관련 질문
@Test @Transactional public void 테스트() throws Exception{ Member member1 = new Member("member1", 10); Team teamA = new Team("teamA"); member1.changeTeam(teamA); teamRepository.save(teamA); //member <- cascade persist em.flush(); em.clear(); memberRepository.findByAge(10); // SELECT 1번 memberRepository.findByUsername("member1"); // SELECT 2번 memberRepository.findById(member1.getId()); // 영속성 컨텍스트에 PK값이 존재 } 쿼리 조회 메서드 실행 시 JPQL 이 동작하여 flush 후 DB에 바로 쿼리가 날라가고 가져온 것이 영속성 컨텍스트에 저장된다고 알고 있습니다.만약에 save(new Member(member1, 10)); 후에save한 엔티티 대상을 조회하기 위한 findByAge (where = 10) , findByUsername (where = member1) 을 순서 대로 쿼리 메서드 호출을 하였을 때 조회 쿼리가 결국 같은 엔티티를 조회하기 위함인데 SELECT 쿼리문이 2번 나갔습니다.2번 나간 이유가findByAge 호출 후에 findByUsername 호출 시 1차 캐시에서 비교할려면은 무조건 id값이랑 비교가 가능하기때문인지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
querydsl
강의자료에 스프링부터3.0이상 메뉴얼을 따라했는데 build에 compilequerydsl이 생성되지 않습니다. plugins { id 'java' id 'org.springframework.boot' version '3.1.4' id 'io.spring.dependency-management' version '1.1.3' } group = 'jpabook' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } 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-validation' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:3.1.4' implementation 'com.fasterxml.jackson.datatype:jackson-datatype-hibernate5-jakarta' //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" testImplementation 'org.projectlombok:lombok:1.18.22' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') }
-
미해결실전! Querydsl
어그리게이트간 id 참조를 할 때는 querydsl 어떻게 잘 활용할 수 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]https://www.popit.kr/id%EB%A1%9C-%EB%8B%A4%EB%A5%B8-%EC%95%A0%EA%B7%B8%EB%A6%AC%EA%B2%8C%EC%9E%87%EC%9D%84-%EC%B0%B8%EC%A1%B0%ED%95%98%EB%9D%BC/이 글을 보고 다른 어그리게이트 간에는 id 참조를 한다고 하면querydsl 을 통해서 다른 어그리게이트간 join 은 어떻게 활용할 수 있나요?예를 들어서 Order, Review 라는 도메인이 아래와 같다고 해볼게요. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Review { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column private String content; @Column private int rate; private Long orderId; public Review(final String content, final int rate) { this.content = content; this.rate = rate; } }@Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column private String name; @Column private String orderStatus; @Column private LocalDateTime createdAt; public Order(final String name, final String orderStatus) { this.name = name; this.orderStatus = orderStatus; this.createdAt = LocalDateTime.now(); } } 이때 생성되는 QType 에는 두 엔티티간의 참조 관계를 표현할 수 없는데 이런 경우에는 join 등을 어떻게 활용할 수 있을까요제가 "어그리게이트간 id 참조를 해라!" 잘못 이해하고 있는 것일까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
45강) 빌드까지 모두 완료하고 v1 화면으로 가서 사용자 추가를 했더니 오류가 나요 ㅜㅜ
강사님 안녕하세요! 수업 잘 듣구 있습니다!다름이 아니라, AWS에 빌드까지 완료하고 인바운드 규칙까지 편집해준 다음, v1 화면으로 돌아가서 사용자 추가 부터 해보았는데 갑자기 서버 내부 오류라는 창과 함께 오류가 뜹니다.. org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "drop table if exists user CASCADE " via JDBC Statement 2023-10-15 08:12:50.119 WARN 18125 --- [nio-8080-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 42001, SQLState: 420012023-10-15 08:12:50.119 ERROR 18125 --- [nio-8080-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper : Syntax error in SQL statement "insert into [*]user (id, age, name) values (default, ?, ?)"; expected "identifier"; SQL statement:insert into user (id, age, name) values (default, ?, ?) [42001-214]2023-10-15 08:12:50.123 ERROR 18125 --- [nio-8080-exec-8] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [insert into user (id, age, name) values (default, ?, ?)]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement] with root causeorg.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "insert into [*]user (id, age, name) values (default, ?, ?)"; expected "identifier"; SQL statement:insert into user (id, age, name) values (default, ?, ?) [42001-214] 혹시 제가 SQL문을 잘못 작성한 것일까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
지연 로딩의 정의
지연 로딩이 한 트랜잭션 안에서 필요한 시기에 로딩하는 걸 말하는 건가요? 아니면 다른 트랜잭션에서도 필요한 시기에 로딩될 수도 있는 건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
api개발 관련
안녕하세요궁금한점이 있습니다. 선생님 강의에서 api개발은 어떤강의를 들어야 하나요?
-
미해결실전! Querydsl
inner join 인 경우 join 문이 없어도 되는 경우
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]queryDsl 강의 중 조인편을 보면서 한가지 실험을 해봤습니다.@Test void 팀A에_소속된_모든_멤버를_조회힌다() { List<Member> found = jpaQueryFactory.selectFrom(member) .where(member.team.name.eq("teamA")) .fetch(); assertThat(found) .map(Member::getTeam) .extracting("name") .allMatch(teamName -> teamName.equals("teamA")); } @Test void 조인을_통해_팀A에_소속된_모든_멤버를_조회힌다() { List<Member> found = jpaQueryFactory.selectFrom(member) .join(member.team, team) .where(team.name.eq("teamA")) .fetch(); assertThat(found) .map(Member::getTeam) .extracting("name") .allMatch(teamName -> teamName.equals("teamA")); }첫번째 테스트는 join 문 없이 QType 을 활용해서 where에 필요한 조건을 작성하였구요두번째 테스트는 join 메서드를 활용한 것 입니다.테스트 결과도 같고 실행 후 실제 수행된 쿼리도 동일하더라구요이런 경우에는 어떤 방법이 더 적절할까요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
즉시 로딩을 사용하면 좋을 때가 있을까요?
안녕하세요 강의 정말 잘 듣고 실무에서도 열심히 사용하고 있습니다. 강의에서 lazy loading과 fetch join을 활용하여 최적화 하는 부분에 대해서는 이해를 하고 있습니다. 그렇다면 eager loading은 사용을 피해야하는 걸까요?아니면 어떤 케이스에 대해서는 즉시 로딩이 더 실무적으로 유용한 경우가 있을까요?즉시 로딩이 사용을 지양해야 된다면 JPA에서 굳이 만들지 않았을 것 같은데 어떤 상황에서 사용해야할지에 대해 의문점이 듭니다. 제가 생각했을 땐 테이블 분리를 위해 엔티티를 나누었지만 항상 같이 조회되는 상황이나 OneToOne 상황에서는 크게 상관없을 것 같긴한데 필요없는 컬럼까지 즉시 로딩으로 가져오는게 성능에 크게 영향을 끼치는지에 대해 궁금합니다. 이외에도 실무적으로 이럴 땐 지연 로딩보단 즉시 로딩이 더 적합하다라는 상황이 있다면 조언 부탁드리겠습니다.감사합니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
페치 조인 질문있습니다!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]컬렉션의 필요성에 대해 질문 좀 드리겠습니다 - 인프런 | 질문 & 답변 (inflearn.com) 여기서 궁금한 내용있습니다!. 1)"생각하신 내용이 맞습니다. 중간 테이블을 중심으로 조회가 가능하다면 크게 문제가 없습니다. 하지만 때때로 중간 테이블을 중심으로 조회하기 어려운 경우들도 있습니다." 김영한 강사님의 답변 내용 중에 떄떄로 중간 테이블을 중심으로 조회하기 어려운 경우가 어떤 경우인지 구체적으로 알려주실수 있나요?? 일단 다대다=>중간테이블 필요=>성능 최적화 필요하면=>중간테이블에 해당하는 리포지토리 생성후 (Spring data JPA에서) @Query(fetch join)사용하는식으로=> 맨날 이런식으로 했었는데 중간 테이블 중심으로 조회하기 어려운 경우가 어떤 경우인지 궁금합니다. 2)BatchSize를 사용하는 경우 일대다의 일의 collection에 해당하는 다( members) 를 일의 BatchSize에 해당하는만큼 가지고 오지 않습니까? for (Team team : teams) { System.out.println("team:"+team.getName()); for(Member mem:team.getMembers()){ System.out.println(mem.getUsername()); } }여기서는 성능 최적화가 이해가 됩니다!.team이 붙어있으므로 배치 사이즈만큼만은 mem.getUsername()이 호출되어도 또 그때동안은 쿼리가 안나가니깐요.근데 궁금한게 IN 쿼리에 들어가는게 BatchSIze만큼의 TeamID인데 연속한 ID만큼 나가는 걸로 알고 있는데 위처럼 연속한 경우는 몰라도, Team을 이것저것 조회하고 그에 대한 member의 메서드를 호출하면 이게 성능상 좋은가요?