inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

회원가입 테스트 오류 발생 문의

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

안녕하세요, 테스트 진행 중 오류가 발생하여 문의드립니다. 회원가입을 테스트할 때 @Transactional을 주석처리하면 정상 작동되지만, 활성화하면 오류가 발생합니다. java.sql.SQLException: Connection is closed 이것은 JdbcMemberRepository의 sava() 작성 내용입니다. @Transactional을 활성화하면 오류가 발생하는 원인과 해결 방법이 궁금합니다..!!

  • MVC
  • spring
  • java
  • spring-boot
jhneuli9 댓글 1 좋아요 0 조회수 437

setter에 대해서 궁금점이 있습니다.

미해결

실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)

안녕하세요! 강의를 잘 듣고 있는 신입 개발자입니다 ㅎㅎㅎ.. setter 사용에 대해서, 궁금한 점이 있습니다. 우선, 저는 setter 사용이 왜 안좋은지에 대해서 명확한 답을 얻지 못했습니다. 심지어 Java로 개발된 여러 프레임워크나 라이브러리 등에서 많은 setAttribute와 같은 메서드가 사용되는 것을 보았기 때문입니다. 심지어 Spring 역시도요. 여러 블로그에 해당 주제에 대해 찾아보면 다음과 같은 이유가 나옵니다. 변경된 의도를 파악하기 어렵다. 객체의 일관성을 유지하기 어렵다. 어떤 class의 프로퍼티를 변경하려면 결국은 해당 클래스의 특정 메서드를 통해 변경을 해야합니다. 일반적으로 class의 변수는 private하게 선언되기 때문에요, 즉 setAttribute를 쓰지않는다면, updateAttribute와 같은 별도의 메서드를 생성해서 변경해야 합니다. 1. 변경된 의도를 파악하기 어렵다 의 이유라면, updateAttribute와 같은 메서드와 setAttribute와 같은 메서드의 readability의 차이가 있다는 말로 귀결되는데, 사실 저희가 setter에 대한 거부반응을 모두 지우고 두 메서드를 바라본다면 저는 차이를 느끼기 어렵습니다. 혹시 아닌가요...? 2. 객체의 일관성을 유지하기 어렵다. 의 이유라면, 객체를 Immutable하게 유지하기 위함인데, 때에 따라서는 이러한 전략이 필요하지만 그렇지 않다면, 객체 값(프로퍼티)의 변경이 발생할 때 마다 새로운 인스턴스를 생성해야 한다는 말이 됩니다. 이거는... 많이 변경되어야 하는 객체라면 메모리 문제가 너무 커지지 않을까요? 개인적으로 Builder와 생성자에 관한 것은 해당 문제와 연관성이 별로 없다고 생각하기 때문에, 위 두가지 이유가 결국 근거라고 생각해요. 강사님 역시 setter에 대해 사용하지 않는 것을 권고한다고 말씀하셔서, 혹시 어떤 명확한 이유인지 궁금해서 여쭤보고 싶습니다.

  • kotlin
  • spring
  • spring-boot
  • java
  • refactoring
chanho0912 댓글 1 좋아요 2 조회수 305

EntityGraph 이용시 컬렉션 페치조인의 경우 질문

해결됨

실전! 스프링 데이터 JPA

안녕하세요! JPQL로 엔티티 페치조인이 아닌 , 일대다 입장에서 컬렉션 페치조인을 할 경우 -> 데이터 뻥튀기 문제가 발생하여 distinct 키워드로 뻥튀기된 데이터를 없애주어야 했느데요 , EntityGraph를 이러한 컬렉션 페치조인에 사용하여도 distinct를 쓴것 처럼 데이터 뻥튀기 문제가 발생하지 않는지 궁금합니다. 감사합니다.

  • spring
  • java
  • JPA
  • spring-boot
요니 댓글 1 좋아요 1 조회수 450

Propagation.REQUIRES_NEW 를 사용하는 이유가 무엇인가요?

미해결

재고시스템으로 알아보는 동시성이슈 해결방법

안녕하세요! 선생님. 다른 락에서는 트랜잭션에 Propagation.REQUIRES_NEW 를 사용하지 않았는데 namedLock 에서는 왜 사용하나요?

  • java
  • spring
  • 동시성
김상운 댓글 3 좋아요 2 조회수 1322

아래 질문 글 Yong.K 님의 질문의 답변에 관한 질문글 입니다 - flush관련

미해결

실전! 스프링 데이터 JPA

아래 질문글 Yong.K 님의 글에 대한 답변으로 , JPQL이 실행되기 전 flush가 되지만 이때 flush는 em.flush() 처럼 영속성 컨텍스트를 완전히 flush 시키는 것이 아니라 , 실행될 JPQL과 관련된 엔티티만 부분적으로 fluish 시키는 것이라고 설명해주셨습니다. 하지만 이렇게 부분적으로만 flush 시킨다면 , 벌크연산 후 clearAutomatically에 의해 영속성 컨텍스트가 비워져 버리면 문제가 생길 수 있어, 벌크연산의 옵션으로 flushAutomatically가 있고 - 이 옵션을 활성화 시키면 em.flush()를 호출한 것 처럼 완전히 flush 되는것으로 이해하였습니다. 그렇다면 벌크연산 사용시 flushAutomatically 옵션을 비활성화 시키고 - clearAutomatically 옵션만을 활성화 시킨다면 여전히 문제가 발생할 여지는 남아있는 것이 맞는지 궁금합니다. 즉 그렇다면 결과적으로 clearAutomatically 옵션만 활성화 시키는게 아니라 , flushAutomatically 옵션도 함께 활성화시켜야 하는것은 아닌지 궁금합니다.

  • java
  • spring-boot
  • JPA
  • spring
요니 댓글 1 좋아요 1 조회수 319

리턴 값 생략에 대하여

미해결

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)

안녕하세요 자바에서 코틀린으로 넘어가고 싶어 강의를 들으며 차근차근 공부중입니다. 인텔리제이에서 option + command + v 단축키를 사용하면 바로 리턴 타입을 알 수 있어서 자바 개발을 할 때 자주 사용 했습니다. 하지만 코틀린은 기본적으로 타입의 명시가 생략되어 있어서 그런지 같은 단축키로 리턴타입이 나오지 않더라구요 기존 자바의 경우 "ABC".startsWith("A"); 에 option + command + v 를 사용하면 boolean a = "ABC".startsWith("A"); 이렇게 startsWith()의 리턴 값이 boolean이라는 것을 알 수 있는데 코틀린의 경우 val startsWith = "ABC".startsWith("A") 이렇게 나옵니다. 제 생각에는 val startsWith: Boolean = "ABC".startsWith("A") 이런식으로 나와야 할 것 같은데 말이죠 물론 메서드에 마우스를 올리면 리턴 타입을 알 수 있지만 자바 개발하면서 익숙해진 단축키라 코틀린에서도 유용하게 활용할 수 있는지 궁금합니다. 그리고 실무에서 개발 할 때에도 리턴타입이 없다면 많이 불편할 것 같은데 아직 자바에서 벗어나지 못해하는 걱정인걸까요...?

  • 코틀린
  • kotlin
  • 인텔리제이
  • 단춬키
  • java
  • oop
lbrve 댓글 1 좋아요 1 조회수 579

MySQL과 Redis의 성능에 관하여 문의드립니다.

미해결

재고시스템으로 알아보는 동시성이슈 해결방법

MySQL의 특징으로 어느 정도의 트레픽까지는 문제없이 활용 가능하다라고 설명해주셨는데 어느 정도를 수치로 말씀해주실 수 있을까요? 그리고 Redis가 MySQL보다 절대적으로 성능이 뛰어난지, 아니면 특정 트래픽 이상부터 성능이 뛰어난게 체감이 되는건지도 궁금합니다. 그리고 성능이라고 표현하신게 비용 대비 퍼포먼스인지, 속도만 놓고봤을 때 더 빠르다인지 모호한 감이 있어서 구체적으로 말씀해주시면 정말 감사하겠습니다. 좋은 강의 촬영해주셔서 감사합니다. 다음 강의도 기대하고 있겠습니다!

  • java
  • spring
  • 동시성
김태영 댓글 1 좋아요 0 조회수 1538

DTO를 이용해서 변경감지를 이런 식으로 하는지 검토 부탁드려요!

미해결

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

안녕하세요, 강의에는 나오지 않았지만 변경감지를 병합보다 추천하셔서 DTO를 사용해서 한 번 짜보았는데 봐주실 수 있나요? ```java package jpabook.jpashop.service; import lombok.Getter; import lombok.Setter; @Getter @Setter public class UpdateItemDto { private Long id; private String name; private int price; private int stockQuantity; private String author; private String isbn; } ``` 일단 UpdateItemDto는 간단히 Getter, Setter만으로 구성했습니다. @PostMapping("items/{itemId}/edit") public String updateItem(@PathVariable("itemId") Long itemId, @ModelAttribute("form") BookForm form) { UpdateItemDto updateItemDto = new UpdateItemDto(); updateItemDto.setId(form.getId()); updateItemDto.setName(form.getName()); updateItemDto.setPrice(form.getPrice()); updateItemDto.setStockQuantity(form.getStockQuantity()); updateItemDto.setAuthor(form.getAuthor()); updateItemDto.setIsbn(form.getIsbn()); itemService.updateItem(itemId, updateItemDto); return "redirect:/items"; } 위 코드는 ItemController 안의 updateItem 메소드입니다. @Transactional public void updateItem(Long itemId, UpdateItemDto updateItemDto) { Item findItem = itemRepository.findOne(itemId); //findItem으로 찾아온 값은 영속상태 findItem.change(updateItemDto); } 위 코드는 ItemService 클래스의 updateItem 메소드입니다. public void change(UpdateItemDto updateItemDto) { // if (updateItemDto.getId() != null) { // this.id = updateItemDto.getId(); // } if (updateItemDto.getName().length() != 0) { this.name = updateItemDto.getName(); } // if (updateItemDto.getPrice() != null) { // this.price = updateItemDto.getPrice(); // } // if (updateItemDto.getStockQuantity() != null) { // this.stockQuantity = updateItemDto.getStockQuantity(); // } this.price = updateItemDto.getPrice(); this.stockQuantity = updateItemDto.getStockQuantity(); // if (updateItemDto.getAuthor() != null) { // this.author = updateItemDto.getAuthor(); // } // if (updateItemDto.getIsbn() != null) { // this.isbn = updateItemDto.getIsbn(); // } } 마지막으로 Item 클래스의 change 메소드입니다. Book의 상위 클래스이기 때문에 author과 isbn 필드가 없어서 이 change 메소드를 Book 클래스 내로 옮겨야 하는지 고민을 했습니다. 그러나 그렇게 진행하면 부수적인 문제가 너무 많이 생겨 그냥 Item 클래스 내에 남기고 author와 isbn을 수정하는 기능은 없앴습니다. id는 바꿀 필요가 없다고 생각하여 기능을 뺐습니다. Form에도 id를 수정하는 란은 없는데 기존에 영한 님이 강의하실 때 ItemController 내에서 book.setId(form.getId)); 하셨는데 잘못된 부분인 것 같습니다. name같은 경우 String이라 웹 상에서 수정을 할 때 빈 칸으로 두면 null보다 empty string으로 받는 것 같아서 updateItemDto.getName() != null 조건에 안 걸리는 것 같더라구요. 그래서 빈 칸을 empty string을 찾는 식으로 짰습니다. 마지막으로 price와 stockQuantity는 int라서 != null 조건을 걸수가없는데 웹 상에서 빈 칸일 때 이전 price와 stockQuantity를 유지하는 방법을 여쭤보고 싶습니다. 결론적으로 제 질문은: 1. UpdateItemDto의 경우 controller 패키지의 BookForm과 이름 외에 똑같은데 그래도 DTO 클래스를 따로 만드는데 의의가 있는건가요? 2. ItemController 내에서 어설프게 Entity를 생성하지 말라고 하셨는데 DTO 객체를 생성하는 것은 괜찮은가요? 3. 전반적으로 이런 방식으로 변경감지를 하는건지가 궁금합니다. 4. change 메소드를 Item 밑에 두는게 맞는지 Book 밑에 두는게 맞는지? 답변 주시면 정말 큰 도움이 될 것 같습니다. 감사합니다!

  • spring
  • java
  • JPA
  • spring-boot
  • 웹앱
ye k 댓글 2 좋아요 1 조회수 1118

Failed to load ApplicationContext 에러

미해결

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

에러 코드 전문 java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) 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:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) Caused by: mapping values are not allowed here in 'reader', line 10, column 15: properties: ^ at org.yaml.snakeyaml.scanner.ScannerImpl.fetchValue(ScannerImpl.java:910) at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:400) at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:251) at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingKey.produce(ParserImpl.java:628) at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:166) at org.yaml.snakeyaml.comments.CommentEventsCollector$1.peek(CommentEventsCollector.java:59) at org.yaml.snakeyaml.comments.CommentEventsCollector$1.peek(CommentEventsCollector.java:45) at org.yaml.snakeyaml.comments.CommentEventsCollector.collectEvents(CommentEventsCollector.java:140) at org.yaml.snakeyaml.comments.CommentEventsCollector.collectEvents(CommentEventsCollector.java:119) at org.yaml.snakeyaml.composer.Composer.composeScalarNode(Composer.java:214) at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:184) at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:314) at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:305) at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:286) at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:188) at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:314) at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:305) at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:286) at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:188) at org.yaml.snakeyaml.composer.Composer.getNode(Composer.java:115) at org.yaml.snakeyaml.constructor.BaseConstructor.getData(BaseConstructor.java:135) at org.springframework.boot.env.OriginTrackedYamlLoader$OriginTrackingConstructor.getData(OriginTrackedYamlLoader.java:99) at org.yaml.snakeyaml.Yaml$1.next(Yaml.java:514) at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:198) at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:166) at org.springframework.boot.env.OriginTrackedYamlLoader.load(OriginTrackedYamlLoader.java:84) at org.springframework.boot.env.YamlPropertySourceLoader.load(YamlPropertySourceLoader.java:50) at org.springframework.boot.context.config.StandardConfigDataLoader.load(StandardConfigDataLoader.java:54) at org.springframework.boot.context.config.StandardConfigDataLoader.load(StandardConfigDataLoader.java:36) at org.springframework.boot.context.config.ConfigDataLoaders.load(ConfigDataLoaders.java:107) at org.springframework.boot.context.config.ConfigDataImporter.load(ConfigDataImporter.java:128) at org.springframework.boot.context.config.ConfigDataImporter.resolveAndLoad(ConfigDataImporter.java:86) at org.springframework.boot.context.config.ConfigDataEnvironmentContributors.withProcessedImports(ConfigDataEnvironmentContributors.java:116) at org.springframework.boot.context.config.ConfigDataEnvironment.processInitial(ConfigDataEnvironment.java:240) at org.springframework.boot.context.config.ConfigDataEnvironment.processAndApply(ConfigDataEnvironment.java:227) at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.postProcessEnvironment(ConfigDataEnvironmentPostProcessor.java:102) at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.postProcessEnvironment(ConfigDataEnvironmentPostProcessor.java:94) at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEnvironmentPreparedEvent(EnvironmentPostProcessorApplicationListener.java:102) at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEvent(EnvironmentPostProcessorApplicationListener.java:87) at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131) at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:85) at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:66) at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120) at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:114) at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:65) at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:344) at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:132) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) ... 27 more 환경설정 1.yml spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true format_sql: true logging.level: org.hibernate.SQL: debug 2.gradle plugins { id 'org.springframework.boot' version '2.7.3' id 'io.spring.dependency-management' version '1.0.13.RELEASE' id 'java' } group = 'jpabook' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' 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-web' implementation 'junit:junit:4.13.2' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() } 해결을 위해 시도했던 것들 1. yml에 ;MVCC=TRUE를 삭제해보았다. (X) 2. h2 DB가 실행되지 않아서 발생할 수 있다는 답변을 보고 켜보았다. (X) 3. yml을 복붙해서 다시 실행해보았다. (X) 4. Test에 @WebAppConfiguration 어노테이션을 추가해보았다. (X)

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

7-3 팩토리얼 에서...

해결됨

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

n의 범위가 100까지인데 팩토리얼로 100! 하면 long 넘어가는데요. BigInteger로 해야하지 않나요?

  • java
  • 코테 준비 같이 해요!
땃쥐 댓글 1 좋아요 0 조회수 254

updateItem PostMapping 질문

해결됨

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

안녕하세요. 영한님 강의 중에 http 도 들었어서 궁금함이 생겨 질문합니다. 데이터 수정을 하시는 부분에서 @PostMapping을 쓰셨는데 이건 그냥 회사 규율이나 개발자 취향에 따라 쓰는 건가요? 리소스의 일부분을 수정하는 것으로 Patch가 있는 걸로 알고 있고 이때 @PatchMapping 을 사용해도 되는 것인지 잘 모르겠어서요. 감사합니다.

  • spring
  • 웹앱
  • java
  • JPA
  • spring-boot
해마 댓글 1 좋아요 1 조회수 305

org.hibernate.type: trace 작동이 잘 안되는 것 같아요

미해결

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

외부 라이브러리 p6spy 추가 전에 application.yml 에 logging.level.org.hibernate.type: trace 만 추가했을 때 MemberRepositoryTest.java를 실행 시 sql 로그가 안 떠요...

  • spring-boot
  • java
  • spring
  • 웹앱
  • JPA
ye k 댓글 3 좋아요 0 조회수 3358

@GeneratedValue(strategy = GenerationType.IDENTITY)

미해결

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

id 값은 String 으로 하면 오류가 생기고 long 타입으로 하면 실행이 됩니다. 찾아보니 h2 버전 문제라는 부분도 있어서 버전도 1.4.200으로 바꾸기도 했는데요 그래도 String 타입은 안돼서 그냥 long 타입으로 써야 할까하는데 괜찮을까요? 그리고 버전은 1.4.200을 그대로 사용해도 될까요?

  • JPA
  • java
csjy 댓글 1 좋아요 2 조회수 523

프로젝트 실행이 안됩니다.

미해결

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

설치 과정을 따라했고 build파일도 실행하여 라이브러리를 다운로드 해주었는데, 아래와 같이 실행 버튼이 안나옵니다.

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

Ubuntu 환경에서 jdk 압축 해제시 오류 발생 관련하여 질문드립니다!

미해결

Data Engineering Course (1) : 빅데이터 하둡 직접 설치하기

강의 감사합니다 항상 재미있게 듣고 있습니다! 강의를 들으며 실습해보던 중 오류가 발생해서 질문 남깁니다..! 현재 jdk-8u271-linux-x64.tar.gz는 디폴트 '다운로드' 폴더에 들어가 있는 상황입니다. 스크립트를 확인해보면 sudo mkdir을 통해 /usr/lib/jvm 디렉토리는 성공적으로 만들어진 것 같은데 ~/Downloads에서 ls를 해보면 선생님처럼 붉은 글씨로 jdk-8u271-linux-x64.tar.gz가 안나옵니다. 그래서 다운로드 파일에 들어있는 jdk 리눅스 파일이 탐색이 안되는 것 같은데 이유를 알 수가 없네요...ㅠㅠ 제가 윈도우용으로 이전에 설치해놓은 jdk 때문인지... 윈도우 디폴트 '다운로드'에 들어있는 jdk 리눅스용 파일을 확인하지 못하는 건지... 아! 윈도우는 64bit로 맞는 파일을 받긴 한것 같습니다! 감사합니다!

  • ubuntu
  • java
  • Hadoop
  • jdk
  • bigdata
  • 데이터 엔지니어링
재현 댓글 2 좋아요 0 조회수 569

양방향 연관관계에 대한 질문입니다.

미해결

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

안녕하세요 영한님 양방향 연관관계에대하여 질문있어서 글 남깁니다! 질문1. 양방향 연관관계를 최대한 쓰지 않아야 하는 이유중 하나가 A,B 엔티티가 있고, 양방향 연관관계를 통해 A엔티티에서 B엔티티의 리스트를 가지고 있어야하는 상황에서, A엔티티 가 가지고 있는 B엔티티 데이터의 리스트 원소 갯수가 엄청나게 많아질 경우 그 리스트를 담고있어야할JVM 메모리에 부담이 될 수 있는 위험성 때문이라고 생각했는데 이에 대한 피드백 부탁드립니다! 질문 2. 양방향 연관관계를 굳이 맺어야하는 이유가 잘 와닿지 않습니다. 강의 예시에서 해당 Team 의 Member 들을 알고 싶기 때문에 양방향 관계를 맺는 데 , 해당 Team 의 Member 들을 알고 싶으면 Member 도메인의 컨트롤러에서 호출 하는게 이점이 더 있지 않을까 하여 질문드립니다. 결론은 제가 생각하기에 단방향 관계로 다 설계 할 수 있을거같아서 , 양방향 관계가 실제 실무에서 쓰이게 된다면, 어떤 상황과 이유에서 쓰이는지 궁금합니다.

  • java
  • JPA
dlektl6 댓글 1 좋아요 0 조회수 372

엔티티의 setter

미해결

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

1. 엔티티에서 setter는 지양하라고 말씀하셨는데 예를 들면 Order의 연관관계 메서드를 작성 시 OrderItem의 setter가 사용됩니다. 이 때 setter를 사용하지 않고 양방향 연관관계 세팅을 할 수 있는 방법이 무엇이 있을까요? 2. 양방향값 세팅은 양방향연관관계일 때 필수적인 건가요?

  • 웹앱
  • spring-boot
  • spring
  • JPA
  • java
binni0515 댓글 1 좋아요 1 조회수 416

OrderItem 엔티티에 대해

해결됨

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

엔티티의 기본생성자는 public 아니면 protected 만 허용한다 하셨는데 OrderItem 엔티티에서 protected의 기본생성자를 만든 이유가 생성메서드로만 만들 수 있게 하기 위함에 더해 프록시 객체를 생성하기 위한 이유도 있나요?

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

태그를 입력할때 insertBefore 에러

미해결

스프링과 JPA 기반 웹 애플리케이션 개발

저런 에러가 발생하고, 하단에 단어가 추가되지 않습니다. 원인이 무엇인지 모르겠습니다.. (tags.html의 구성은 강사님과 똑같이 하였습니다.) 단어를 추가하려고 할때마다 박스 아래에 단어는 추가되지않고, 같은 에러가 계속 추가됩니다.

  • spring-boot
  • JPA
  • spring
  • java
  • thymeleaf
call 댓글 4 좋아요 0 조회수 966

인기 태그

인프런 TOP Writers

주간 인기글