[질문 내용] 여기에 질문 내용을 남겨주세요. 1. Tasks - other에 compileQuerydsl이 없어서 compileJava를 눌러서 했는데 괜찮은지 ?? 2.강사님과 다르게 build /generated 이렇게 생성되어도 문제가 없는지? 저런식으로 Q파일들이 생성되었는데 import가 안되고 사용이 안되는 이유 알려주시면 감사하겠습니다.
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
책 이름 등록하고 사용자가 대여하는 기능을 하고있는데 책 대출 기능에서 사용자이름과 책이름을 입력하고 저장하게되면 내부 서버오류 500 뜨면서 java.lang.NullPointerException: null 이라고 나옵니다. 구글링을 해봤는데 해결이 안되서 질문드립니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] 수업에 다대다 단방향만나와서 양방향하는 방법을 알고 싶습니다. 쉽게 말해서 한 학생이 여러과목을 들을 수 있는데 과목의 입장에서는 다양한 학생들이 있으니 그렇게 양방향으로 보고 싶습니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (아니요) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 강의를 보고 엔티티를 설계하여 프로젝트를 진행하고 있습니다. 강의에서 말씀해주신대로 모든 FetchType을 LAZY로 하여 개발하고 있는데 문득 지연로딩이 실제로 어떤 상황에 필요한지가 궁금해졌습니다. 강의에서 말씀해주신대로 연관관계 매핑 데이터를 즉시 가져오지 않고 필요할 때 사용할 수 있도록 할 때 지연로딩을 사용한다는 것은 이해했습니다. 실무에서 어떤 상황에 적용되는지 찾아보니, 여러 이미지들을 스크롤하면서 이미지를 실제로 화면에서 보게 될 때 사용하면 효율적이라는 포스팅을 보았습니다. 그런데 또 실무에서는 OSIV를 off한다고 보았습니다. OSIV가 off라면 영속성 컨텍스트가 Service, Repository에서만 살아있게 되어 어쨌든 Service 단에서 모두 처리해야 하는데 그렇다면 지연로딩이나 즉시로딩이나 별 차이가 없는 것 아닌가요?? 혹시 제가 잘못 알고 있는 것이 있는지, 어떤 상황에서 지연로딩을 사용하는 것이 좋은지 궁금합니다. 감사합니다:)
엔티티에 Enum 클래스의 리스트를 포함시키려고 합니다. 예를 들어서 Person 이라는 엔티티가 Hobby 라는 Enum 클래스의 리스트를 가질 때, PersonHobby 라는 엔티티를 만들고 그 안에 Hobby 를 적용시켜서 두 엔티티 사이의 연관관계를 만들려고 합니다. 이 때, Person 엔티티와 PersonHobby 엔티티는 일대다 관계로 만드는 게 맞을까요? 다대다 관계로 만드는 게 맞을까요? 하나의 동일한 취미를 여러 사람이 가질 수 있으니 다대다 관계일 수도 있다고 생각되는데, 이전에 값 타입 컬렉션 영상에서는 이러한 상황에서 일대다를 권장한다고 했기 때문에 헷갈려서 질문을 남깁니다.
안녕하세요 김영한님! 저는 2년차 백엔드 개발자 주니어입니다. 다름 아니라, QueryDSL이 2021년 5.0.0 버전 이후 새로 릴리즈되고 있지 않습니다. 그래서 만약 새로운 서버에 대한 기술 스택을 정할 때, QueryDSL에 대한 영한님의 의견이 어떨지 궁금하여 글을 작성하게 되었습니다. ("영한님 의견대로 도입한다 vs 안 한다" 같은 상황이 아니라 단순히 의견이 궁금한 겁니다!) 현재 거론되고 있는 대체 라이브러리는 대략 다음과 같은 것 같습니다. jooq kotlin-jdsl (코틀린 한정) MyBatis 만약 영한님이라면 현시점에서 QueryDSL을 선택하실 것 같나요? 다른 기준이 필요하다면 무엇일까요? 혹은 요새 관심있는 라이브러리가 있으실까요? 의견이 궁금합니다! 감사합니다.
안녕하세요 countQuery 최적화까지 잘 들었는데요. queryDsl 특정버전 이상에서는 fetchResults(), fetchCount() 가 deprecated 되어었네요. 그러면 앞으로 queryDsl 로 페이징을 처리할 때는. count(), content() 쿼리 동시에 X : searchPageSimple() 함수에서 사용한 fetchResult() 는 사용X 이므로. 쿼리 최적화 방법도 X : 리턴값에 fetchCount() 를 사용해야 하므로. count(), content() 쿼리 별도로 날리고 ( https://www.inflearn.com/questions/806452 참고) count() 쿼리시에는 sql의 count() 함수와 fetchOne() 을 사용한다. 정리하면 3번의 방법을 사용하되, 이번 강의에서 말씀해주신 특정 조건에만 날아가는 쿼리도 사용은 못하는 것(fetchCount() Depcreaed 이므로) 맞을까요? 감사합니다.
안녕하세요 영한님! 저는 강의 후에 개인 프로젝트를 진행중인데요 @Column(nullable = false) @ElementCollection private List<Tech> techs; Post class에 해당 Enum type List가 있습니다. package project.como.domain.post.model; import lombok.AllArgsConstructor; import lombok.Getter; @Getter @AllArgsConstructor public enum Tech { Java("Java"), Spring("Spring"); private String stack; } 그런데 Projections.constructor 방식으로 Dto를 만들때 에러가 발생합니다. List<PostAbstractResponseDto> content = queryFactory .select(Projections.constructor(PostAbstractResponseDto.class, post.title, post.category, post.state, post.techs )) .from(post) .where(stateEq(condition.getState()), categoryEq(condition.getCategory()), techsContains(condition.getTechs())) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); post.techs와 조건식을 제외하고 조회할 때는 정상적으로 잘 동작하지만, post.techs를 넣는 경우에 argument type mismatch 에러가 발생하네요. 무슨 문제인지 궁금합니다. 감사합니다 :)
jpa로 토이프로젝트를 하고 있는데 아래와 같이 여정 정보를 저장하는 코드 입니다. 저장할 Journey를 Entity로 변경 후 setTravel로 매핑합니다. 그 후 전체 Travel 데이터를 return하는데 return되는 값에 저장했던 Journey가 2개 들어 있습니다. 왜그런지 이유를 잘 모르겠습니다. ㅠ.ㅠ @Transactional public List<TravelDto.Response> addJourney(Traveler traveler, Long travelId, JourneyDto.Request newJourney) throws IOException { Travel travel = travelRepository.findTravelByTravelerIdAndTravelId(traveler.getId(), travelId); Journey newJourneyEntity = newJourney.toEntity(); newJourneyEntity.setTravel(travel); return getTravel(traveler); } public List<TravelDto.Response> getTravel(Traveler traveler) { return travelRepository.findByTravelerIdOrderByOrderKeyAsc(traveler.getId()) .stream() .map(TravelDto.Response::new) .collect(Collectors.toList()); } public void setTravel(Travel travel) { if (this.travel != null) { this.travel.getJourneys().remove(this); } this.travel = travel; travel.getJourneys().add(this); }
junit4로 작성했고 처음에 테스트 케이스가 없다고 해서 설정에서 run using tests를 intllij로 바꿔서 했는데 java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext( DefaultCacheAwareContextLoaderDelegate.java:98 ) at org.springframework.test.context.support .DefaultTestContext.getApplicationContext( DefaultTestContext.java:124 ) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary( ServletTestExecutionListener.java:190 ) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance( ServletTestExecutionListener.java:132 ) at org.springframework.test.context.TestContextManager.prepareTestInstance( TestContextManager.java:248 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest( SpringJUnit4ClassRunner.java:227 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall( SpringJUnit4ClassRunner.java:289 ) at org.junit.internal.runners.model.ReflectiveCallable.run ( ReflectiveCallable.java:12 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock( SpringJUnit4ClassRunner.java:291 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild( SpringJUnit4ClassRunner.java:246 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild( SpringJUnit4ClassRunner.java:97 ) at org.junit.runners.ParentRunner$4.run( ParentRunner.java:331 ) at org.junit.runners.ParentRunner$1.schedule( ParentRunner.java:79 ) at org.junit.runners.ParentRunner.runChildren( ParentRunner.java:329 ) at org.junit.runners.ParentRunner.access$100( ParentRunner.java:66 ) at org.junit.runners.ParentRunner$2.evaluate( ParentRunner.java:293 ) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate( RunBeforeTestClassCallbacks.java:61 ) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate( RunAfterTestClassCallbacks.java:70 ) at org.junit.runners.ParentRunner$3.evaluate( ParentRunner.java:306 ) at org.junit.runners.ParentRunner.run ( ParentRunner.java:413 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run ( SpringJUnit4ClassRunner.java:190 ) at org.junit.runner.JUnitCore.run ( JUnitCore.java:137 ) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs( JUnit4IdeaTestRunner.java:69 ) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute( IdeaTestRunner.java:38 ) at com.intellij.rt.execution.junit.TestsRepeater.repeat( TestsRepeater.java:11 ) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs( IdeaTestRunner.java:35 ) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart( JUnitStarter.java:232 ) at com.intellij.rt.junit.JUnitStarter.main( JUnitStarter.java:55 ) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.initializeBean( AbstractAutowireCapableBeanFactory.java:1804 ) at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.doCreateBean( AbstractAutowireCapableBeanFactory.java:620 ) at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.createBean( AbstractAutowireCapableBeanFactory.java:542 ) at org.springframework.beans.factory.support .AbstractBeanFactory.lambda$doGetBean$0( AbstractBeanFactory.java:335 ) at org.springframework.beans.factory.support .DefaultSingletonBeanRegistry.getSingleton( DefaultSingletonBeanRegistry.java:234 ) at org.springframework.beans.factory.support .AbstractBeanFactory.doGetBean( AbstractBeanFactory.java:333 ) at org.springframework.beans.factory.support .AbstractBeanFactory.getBean( AbstractBeanFactory.java:208 ) at org.springframework.context.support .AbstractApplicationContext.getBean( AbstractApplicationContext.java:1157 ) at org.springframework.context.support .AbstractApplicationContext.finishBeanFactoryInitialization( AbstractApplicationContext.java:911 ) at org.springframework.context.support .AbstractApplicationContext.refresh( AbstractApplicationContext.java:583 ) at org.springframework.boot.SpringApplication.refresh( SpringApplication.java:731 ) at org.springframework.boot.SpringApplication.refreshContext( SpringApplication.java:408 ) at org.springframework.boot.SpringApplication.run ( SpringApplication.java:307 ) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext( SpringBootContextLoader.java:136 ) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal( DefaultCacheAwareContextLoaderDelegate.java:141 ) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext( DefaultCacheAwareContextLoaderDelegate.java:90 ) ... 27 more Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService( AbstractServiceRegistryImpl.java:284 ) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService( AbstractServiceRegistryImpl.java:246 ) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService( AbstractServiceRegistryImpl.java:223 ) at org.hibernate.id .factory.internal.DefaultIdentifierGeneratorFactory.injectServices( DefaultIdentifierGeneratorFactory.java:175 ) at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies( AbstractServiceRegistryImpl.java:295 ) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService( AbstractServiceRegistryImpl.java:252 ) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService( AbstractServiceRegistryImpl.java:223 ) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>( InFlightMetadataCollectorImpl.java:173 ) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete( MetadataBuildingProcess.java:127 ) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata( EntityManagerFactoryBuilderImpl.java:1460 ) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build ( EntityManagerFactoryBuilderImpl.java:1494 ) at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory( SpringHibernateJpaPersistenceProvider.java:58 ) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory( LocalContainerEntityManagerFactoryBean.java:365 ) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory( AbstractEntityManagerFactoryBean.java:409 ) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet( AbstractEntityManagerFactoryBean.java:396 ) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet( LocalContainerEntityManagerFactoryBean.java:341 ) at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.invokeInitMethods( AbstractAutowireCapableBeanFactory.java:1863 ) at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.initializeBean( AbstractAutowireCapableBeanFactory.java:1800 ) ... 42 more Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect( DialectFactoryImpl.java:100 ) at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect( DialectFactoryImpl.java:54 ) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService( JdbcEnvironmentInitiator.java:138 ) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService( JdbcEnvironmentInitiator.java:35 ) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService( StandardServiceRegistryImpl.java:101 ) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService( AbstractServiceRegistryImpl.java:272 ) ... 59 more 이렇게 오류가 뜨네요 2시간째 이것만 붙들고 있는데 뭐가 문제인걸까요? ㅠㅠ
안녕하세요, 위 사진처럼 JPAQueryFactory를 별도로 생성해주거나, 아니면 JPAQueryFactory 를 별도로 @Bean 등록해서 생성자 파라미터로 주입받거나 두가지 방식으로 아무거나 해도 되잖아요? 그런데 문득 궁금한데, 습관처럼 사용하던 EntityManager 같은 것들은 Spring이 자동으로 @Bean 으로 등록해서 관리하고 있는 거죠? 그렇다면 JPAQueryFactory는 왜 별도로 스프링이 @Bean 으로 자동 등록해두지 않은 거죠? 감사합니다.
@Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Post post)) return false; return id.equals(post.getId()); } 위에 처럼 equals 메서드를 재정의했고 id값만 사용해 객체를 비교했습니다. 예상한걸로는 id값만 사용했기에 객체가 초기화 되지 않는걸 예상했고 하지만 실제로 동작에서는 초기화가 되는것을 확인했습니다. @Override public boolean equals(Object o) { return true; } 그리고 테스트 하기위해 위에 처럼 필드를 사용하지 않게 재정의를 했고 하지만 역시 equals를 사용하면 객체가 초기화 되었습니다. 이유가 무엇인가요? 스택오버플로우 에서는 equals가 재정의되면 프록시 객체에서는 원본객체로 위임한다는 답변이 있습니다. 원본 객체로 위임하면서 초기화가 발생하는것일까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] >> 로컬 환경 스프링부트 3.1.2 hibernate-core 6.2.6 안녕하세요! Projections.bean()은 setter를 이용해서 인스턴스를 만든다고 하셨는데, getter/setter를 전부 제거해도 테스트를 통과하고 인스턴스도 잘 초기화가 되어버렸습니다. 좀 이상하기도 하고 bean()와 fields()가 동작 방식이 거의 같은 것 같아 확인해보니 new QBean<T>를 할 떄 fields()에는 fieldAccess 파라미터에 true를 인수로 넣는 차이밖에 없더라고요. public static <T> QBean<T> fields(Class<? extends T> type, Expression<?>... exprs) { return new QBean<T>(type, true, exprs); } 라이브러리 코드를 보면 fieldAccess가 true면 this.fields에 값을 바인딩하고 this.setters는 emptyList로 초기화하고 fieldAccess가 false일 경우 this.fields를 emptyList로 초기화하고 this.setters에 값을 바인딩하는데요. if (fieldAccess) { this.fields = initFields(bindings); this.setters = Collections.emptyList(); } else { this.fields = Collections.emptyList(); this.setters = initMethods(bindings); } 실무에서 활용할 때 이 두 함수 관련해서 주의점이 있을까요?
도커를 사용해서 mysql에 붙혀서 하고있는데 아래와같이 에러가 나옵니다. 어떻게 해야 하나요? order서비스파일에서 에러납니다. db가 안붙어서 그런건가요? 같은 컴퓨터인데 lombok이 동작이 안되길래 lombok되는곳으로 옮겨서 했습니다. 파일 주소는 아래 첨부합니다. error: incompatible types: javax.persistence.criteria.Order cannot be converted to shopapi.jpashop.domain.Order Order order = orderRepository.findOne(orderId); error: incompatible types: shopapi.jpashop.domain.Order cannot be converted to javax.persistence.criteria.Order orderRepository.save (order); ^ error: incompatible types: List<javax.persistence.criteria.Order> cannot be converted to List<shopapi.jpashop.domain.Order> return orderRepository.findAllByString(orderSearch); ^ ^