inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

PATCH와 PUT의 차이점

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

14강 유저 업데이트 부분에서 PATCH가 아닌 PUT을 사용하는 이유가 궁금합니다!! 제가 알기로는 PATCH는 일부 수정이 가능하고, PUT은 완전 덮어쓰기라고 알고 있는데, PATCH가 아닌 PUT을 사용하는 이유가 무엇인가요?? 만약 PATCH 사용이 불가능한게 아니라 가능할 경우 코드가 어떻게 되는지도 궁금합니다! 항상 감사합니다!!

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
blue 댓글 2 좋아요 1 조회수 2322

다대다를 다대일 일대다로 사용하면 안되는 걸까요?

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요! 다대다 매핑 관련하여 질문드립니다. 강의에서도 그렇고 구글링을 했을 때도 그렇고 다대다 매핑을 항상 @oneToMany @ManyToOne 으로 매핑을 하더라구요! 그러다가 문득 @ManyToOne @OneToMany로 다대다를 풀어내는 경우는 아예 없는건지 궁금해졌습니다. 제가 지금 사이드 프로젝트를 하고 있는데 erd를 @ManyToOne @OneToMany로 해놨었거든요..! 이 경우에 어떤 문제가 발생하는지 실무에서는 아예 사용하지 않는 다대다 매핑 방법인지 사용한다면 어떤 경우에 사용되는 것인지가 궁금합니다..!

  • java
  • jpa
jj93913 댓글 1 좋아요 0 조회수 433

em.createQuery() 파라미터 질문드려요.

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 저의 경우에 인텔리j에서 저런식으로 String으로만 파라미터가 잡히는데, 강의 내용처럼 qlString으로 바꾸려면 어떻게 해야하나요.

  • java
  • jpa
soghwns93 댓글 1 좋아요 0 조회수 302

List Map 전환

해결됨

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

주문 조회 V5: JPA에서 DTO 직접 조회 - 컬렉션 조회 최적화 강의에서 Map으로 컬렉션 추가하는 것을 보고 질문 드립니다. (list를 map으로 변환하고 key인 orderId로, value인 orderItem 컬렉션 추가) 그대로 orderItems 리스트로 추가하는 방법과 비교해서 "매칭 성능 향상(O(1))"이 된다고 적혀졌는데, list → map 으로 바꾸는 비용 또한 고려해서 구체적으로 어떻게 성능 차이가 있는지 궁금합니다. result.forEach(o -> o.setOrderItems(orderItems));

  • java
  • spring
  • spring-boot
  • jpa
선호 댓글 1 좋아요 1 조회수 238

dialect 질문 있습니다.

해결됨

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 우선 개발 버전은 JDK 17입니다. 강의에서 강사님이 h2를 이용하며 OracleDialect로 변경 후 정상적으로 동작이 되었는데 현재 저의 셋팅에서는 정상적으로 작동이 되지 않더라구요 H2 홈페이지를 검색 해본결과 Mode를 Oracle을 추가하면된다고 나와있었고 MODE를 Oracle로 변경하여도 오류가 발생하였습니다.. 오류내용은 https://www.inflearn.com/questions/1171985/dialect-%EC%84%A4%EC%A0%95-%EC%98%A4%EB%A5%98-%EC%A7%88%EB%AC%B8%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4 이분과 같습니다.. David님이 달아주신 답변에는 ojdbc를 의존성 추가를 하는것으로 되어있는데 시도해보았지만 해결되지 않았습니다.. 물론 이게 강의에 중점은 아니지만 스스로 해결해보려 해도 답이 안나와서 질문드립니다... 다른 추가적인 설정이 필요한걸까요??ㅜㅜ Exception in thread "main" jakarta.persistence.PersistenceException: [PersistenceUnit: hello] Unable to build Hibernate SessionFactory at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1591) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1512) 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 jpql.JpaMain.main(JpaMain.java:14) Caused by: org.hibernate.MappingException: Could not instantiate id generator [entity-name=jpql.Product] at org.hibernate.id.factory.internal.StandardIdentifierGeneratorFactory.createIdentifierGenerator(StandardIdentifierGeneratorFactory.java:230) at org.hibernate.id.factory.internal.IdentifierGeneratorUtil.createLegacyIdentifierGenerator(IdentifierGeneratorUtil.java:127) at org.hibernate.mapping.SimpleValue.createGenerator(SimpleValue.java:415) at org.hibernate.internal.SessionFactoryImpl.lambda$createGenerators$1(SessionFactoryImpl.java:457) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1779) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at org.hibernate.internal.SessionFactoryImpl.createGenerators(SessionFactoryImpl.java:456) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:271) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:450) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1507) ... 4 more Caused by: org.hibernate.HibernateException: Could not fetch the SequenceInformation from the database at org.hibernate.engine.jdbc.env.internal.ExtractedDatabaseMetaDataImpl.sequenceInformationList(ExtractedDatabaseMetaDataImpl.java:307) at org.hibernate.engine.jdbc.env.internal.ExtractedDatabaseMetaDataImpl.getSequenceInformationList(ExtractedDatabaseMetaDataImpl.java:151) at org.hibernate.id.enhanced.SequenceStyleGenerator.getSequenceIncrementValue(SequenceStyleGenerator.java:581) at org.hibernate.id.enhanced.SequenceStyleGenerator.adjustIncrementSize(SequenceStyleGenerator.java:259) at org.hibernate.id.enhanced.SequenceStyleGenerator.configure(SequenceStyleGenerator.java:207) at org.hibernate.id.factory.internal.StandardIdentifierGeneratorFactory.createIdentifierGenerator(StandardIdentifierGeneratorFactory.java:224) ... 20 more Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ALL_SEQUENCES" not found; SQL statement: select * from all_sequences [42102-224] at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) at org.h2.message.DbException.get(DbException.java:223) at org.h2.message.DbException.get(DbException.java:199) at org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8064) at org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8035) at org.h2.command.Parser.readTableOrView(Parser.java:8024) at org.h2.command.Parser.readTablePrimary(Parser.java:1788) at org.h2.command.Parser.readTableReference(Parser.java:2268) at org.h2.command.Parser.parseSelectFromPart(Parser.java:2718) at org.h2.command.Parser.parseSelect(Parser.java:2824) at org.h2.command.Parser.parseQueryPrimary(Parser.java:2708) at org.h2.command.Parser.parseQueryTerm(Parser.java:2564) at org.h2.command.Parser.parseQueryExpressionBody(Parser.java:2543) at org.h2.command.Parser.parseQueryExpressionBodyAndEndOfQuery(Parser.java:2536) at org.h2.command.Parser.parseQueryExpression(Parser.java:2529) at org.h2.command.Parser.parseQuery(Parser.java:2498) at org.h2.command.Parser.parsePrepared(Parser.java:627) at org.h2.command.Parser.parse(Parser.java:592) at org.h2.command.Parser.parse(Parser.java:564) at org.h2.command.Parser.prepareCommand(Parser.java:483) at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:639) at org.h2.server.TcpServerThread.process(TcpServerThread.java:289) at org.h2.server.TcpServerThread.run(TcpServerThread.java:191) at java.base/java.lang.Thread.run(Thread.java:833) at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) at org.h2.engine.SessionRemote.readException(SessionRemote.java:650) at org.h2.engine.SessionRemote.done(SessionRemote.java:619) at org.h2.command.CommandRemote.prepare(CommandRemote.java:78) at org.h2.command.CommandRemote.<init>(CommandRemote.java:50) at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:487) at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1166) at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:93) at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:316) at org.hibernate.tool.schema.extract.spi.ExtractionContext.getQueryResults(ExtractionContext.java:43) at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:39) at org.hibernate.engine.jdbc.env.internal.ExtractedDatabaseMetaDataImpl.sequenceInformationList(ExtractedDatabaseMetaDataImpl.java:291) ... 25 more

  • java
  • jpa
gogo 댓글 2 좋아요 0 조회수 496

내부 클래스에 @Slf4j를 적용하는 이유

미해결

스프링 DB 2편 - 데이터 접근 활용 기술

강의에서 내부 클래스에도 @Slf4j를 적용하는 것을 확인할 수 있는데 그 이유가 궁금합니다! @Slf4j @SpringBootTest public class TxBasicTest { @Slf4j static class BasicService { } }

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
Jaesang Yoon 댓글 1 좋아요 0 조회수 417

applycation.yml 의 readTimeout 이 적용이 안됩니다.

미해결

생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현

Springboot 3.0.2 ext { set('springCloudVersion', "2022.0.1") } 최신 부트 3.2 에서는 호환 버전이 없어서 그런지 잘 안되서 위 와 같은 버전으로 하니깐 동작을 하는데, 타임아웃관련해서는 application.yml 에 설정한 부분이 적용안되는것 같습니다. 아래 readTimeout 부분에 마우스 오버 해보니, "Cannot resolve configuration property 'feign.client.config.default.readTimeout' " 라고 표시 되더라구요. 혹시 버전에 따른 문제인지 코드부분을 점검해봐도 원인을 알 수 가 없네요. 확인 좀 부탁드릴게요~ feign: client: config: default: connectTimeout: 5000 readTimeout: 5000 @GetMapping("/health") public ResponseEntity<HealthCheckResponseDto> healthCheck() { try { Thread.sleep(6000); } catch (InterruptedException e) { e.printStackTrace(); } ..... }

  • spring-boot
  • jpa
  • web-api
원데이 댓글 2 좋아요 0 조회수 782

@Transactional 적용 (Spring Data JPA, JPA 상황에 따른..)

해결됨

스프링 DB 2편 - 데이터 접근 활용 기술

섹션 8의 <실용적인 구조> 강의에서 질문드립니다. JPA의 모든 데이터 변경은 트랜젝션 안에서 일어나기 때문에 JPA를 사용할 때는 리포지토리 계층에 @Transactional을 붙여야한다고 배웠습니다. 그런데 Spring Data JPA는 @Transactional을 붙이지 않아도 @Transactional 처리를 자동으로 한다는 것 같은데 맞는 얘긴가요? 원래 트랜젝션 적용은 서비스 계층에서 이뤄저야한다고 배웠습니다. 그래서 서비스 계층에서 @Transactional을 붙여왔고요. 그런데 해당 강의의 8분 지점에서 ItemServiceV2의 경우 Spring Data JPA에 의존하고 있기 때문에 리포지토리 계층에서는 @Transactional을 적용하지 않았고 서비스 계층인 ItemServiceV2에서 @Transactional을 적용한 것 같은데 맞을까요?

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
Jaesang Yoon 댓글 1 좋아요 0 조회수 314

섹션8 > API 서버에서 소셜 회원처리

미해결

코드로 배우는 React 19 with 스프링부트 API서버

안녕하세요, 강사님. 섹션8 > API 서버에서 소셜 회원처리 18분 26초까지 영상을 보고 로그인을 시도했는데 DB 테이블에 계정이 생성이 안되네요... 어디쪽이 문제일까요??

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
이재윤 댓글 2 좋아요 0 조회수 436

13강 마지막 부분 질문 있습니다.

해결됨

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

제가 람다식, 익명클래스, 제네릭에 대한 개념이 확실하게 안 잡혀서 코드이해가 너무 안 되길래 개념부터 다시 찾아보고 공부하고 있는데요 ㅠㅠㅠ 이렇게 공부하는 게 조금 과할 수 있지만 완벽하게 이해를 하고 넘어가고 싶습니다. 제가 궁금한 점은 query함수를 실행하면 sql이 적용된 결과데이터베이스 전체가 mapRow함수의 파라미터 rs로 들어가게 되는 것 같은데 데이터베이스의 자료형이 ResultSet인가요? rowNum 변수의 필요성입니다. mapRow메서드를 오버라이딩을 해줄 때 rowNum사용을 전혀 안 하고 있는 것 같은데, 어떤 값이 rowNum으로 들어가고 어떻게 작동하는 건가요? mapRow메서드의 반환값은 UserResponse객체 형태인데 결과적인 getUsers메서드의 반환값이 어떻게 List<UserResponse> 형태로 변환될 수 있나요? query함수의 역할인가요? 감사합니다.

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
blue 댓글 1 좋아요 2 조회수 310

테스트 코드에서 @BeforeEach가 아니라 sql 사용하시는 이유 문의드립니다.

미해결

Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트

안녕하세요! 실무에서 테스트 코드 적용을 위해 강의를 열심히 듣고 있는 중 궁금한 부분이 있습니다. 테스트코드 사용 시 @BeforeEach를 사용하는 경우도 있는데, sql로 초기 데이터 추가를 사용하시는 이유가 궁금합니다. 작은 서비스가 아니고 복잡한 서비스의 경우 sql로 넣는게 편할것 같기는 한데, 상태에 따라 id값이 필요한 경우도 있고, sql로 작성 시 테스트 마다 데이터가 적용이 동일하지 않을 것 같기도 해서 실제 복잡한 프로젝트에서 어떻게 사용하시는지 궁금해서 문의드립니다. @BeforeEach가 한눈에 들어오지 않아서 잘 사용하지 않으신다고 설명해 주시기는 했지만, SQL로 사용 시 조회 등의 테스트에서는 특정 상태의 데이터 id를 알아야 하고, 그럼 SQL에서 해당 데이터의 id값과 상태값을 다시 확인해야 하는 형태는 동일하게 한눈에 안 들어올 것 같아서 고민이 되더라고요. 저도 SQL로 초기 데이터를 추가하는 형태로 사용하다가 이후에 테스트 코드의 유지보수가 쉽지 않은 경험이 있어서 강사님께서는 복잡한 비즈니스의 실무에서는 어떻게 사용하시는 궁금합니다. 감사합니다.

  • spring
  • tdd
  • jpa
  • 소프트웨어-테스트
  • unittest
wony 댓글 1 좋아요 0 조회수 724

api404에러 진도좀 나가고 싶어요 ㅠㅠ

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

왜 404가 뜨는 지 잘 모르겠습니다. 인텔리제이 종료 했다 다시 시작 했는데도 그대로입니다 ㅠ

  • java
  • spring
  • spring-boot
  • jpa
y6852229 댓글 1 좋아요 0 조회수 390

테스트 코드

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 상품주문_재고수량초과() 테스트를 진행하는데 강의영상에서는 의도적으로 틀린결과값이 나오는 것을 예측하는 경우에도 초록불이 뜨는데, 저는 빨간불이 뜨고 테스트가 실패했다고 뜹니다. 이유를 알고 싶습니다. 참고로 저는 JUnit5로 실습하고 있습니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
bluest12 댓글 1 좋아요 0 조회수 378

섹션7 이후 Todo List 조회 실패

미해결

코드로 배우는 React 19 with 스프링부트 API서버

안녕하세요 강사님. 섹션 7까지 강의를 잘 보고 따라했는데요. 이상하게 Todo가 안나타납니다. getList에서 데이터 조회까진 다 되고 setServerData에도 값을 넣어주는데요. return에서 servaData를 뽑으려니 뽑히지가 않네요. 그래서 return ( {serverData} ) 만 해도 값이 안나옵니다.. 콘솔엔 뽑을 수 있게 오브젝트로 나오는데.. 혹시 추측되는 이유가 있으실까요? 아래 깃허브 주소도 첨부하겠습니다. https://github.com/Jack0215/react-mall-with-spring 확인 해주시면 감사하겠습니다.

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
이재윤 댓글 2 좋아요 0 조회수 487

h2-console 왼쪽 메뉴에 테이블이 안보입니다.

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

빨간색 영역에 생성된 테이블이 있어야 하는데 안보입니다. refresh 버튼을 누르거나 로그아웃 후 로그인해도 안보입니다. show tables; 명령어를 실행하면 테이블은 존재합니다.

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
  • rabbitmq
SeJongDeveloper 댓글 1 좋아요 0 조회수 407

hasIpAddress 설정 403

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

왜 게이트웨이로 접근이 안될가요? hasipaddress값에 제 컴 아이피를 적고 http://220.86.33.96:9295/welcome > 접근가능한데 http://220.86.33.96:8000/user-service/welcome > 접근불가떠요.. 이해가안됩니다 게이트웨이서버건 유저 서버건 모두 제 컴퓨터고 제 서버 아이피가 220.86.33.96인데.. hasIpAddress값을 127.0.0.1로 주고 접근하면 모든곳에서 접근이 됩니다..

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
  • rabbitmq
플하 댓글 1 좋아요 0 조회수 755

테스트에서 @Commit과 @Transactional(rollback=false) 차이

미해결

실전! Querydsl

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 테스트에서 DB에 반영되는 내용을 보기 위해서 @Commit을 다셨는데, 이전 강의들에서는 Transactional(rollback=false)로 그걸 수행하셨습니다. 차이가 있을까요?

  • java
  • jpa
한성현 댓글 1 좋아요 1 조회수 256

테이블간에 연관관계가 없을 때 질문입니다.

미해결

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

안녕하세요 만약 여러 테이블이 있는데 서로 연관관계가 맺어있지 않다면, JPA를 통해 JOIN이 불가능할까요? @ManyToOne과 같은 어노테이션을 사용할수 없는걸까요? 모든 테이블이 PK만 있고 FK가 없는 상태입니다. USER 테이블에 ID(PK) PC_ID NAME PC 테이블에 ID(PK) PC_NAME 위와같이 컬럼이 있을 때, USER 테이블에 PC_ID를 FK로 지정하지 않아도, JPA에서 활용할 수 있을까요? 현재 구현한 모든테이블이 이와같이 FK는 없고, PK만 지정되어있습니다 ㅠ 기존에 JDBC를 사용할땐 그냥 A.PC_ID와 B.ID 를 JOIN해서 사용했습니다.

  • java
  • jpa
우으어으 댓글 1 좋아요 0 조회수 227

@transactional 의 범위에 대해 질문이 있습니다.

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예 [질문 내용] 현재 개발을 하다가 @transactional 의 범위에 대해 궁금한 점이 있어서 질문 올립니다. @Service class A{ //A 메서드 @transactional public Response saveShowProgram{ saveTV(Long openapiId); saveMovie(Long openapiId); Response = TV 의 일부+ movie의 일부 return response; } //B 메서드 @transactional public Response saveShowMoive{ saveMovie(Long openapiId); Response = Movie 내용 return response; } private Program saveMoview(Long openapiId){ Program program= programRepository.findByOpenAPiId(openapiId).orElseGet( Program newProgram = apiProgramToProgram; programRepository.save(newProgrm); return newProgram; } } 현재 문제 코드를 간략하게 나타낸 것입니다. saveShowProgram 과 saveShowMovie 모두 saveMovie를 호출하고 있습니다. 근데 이게 개발 과정에서 테스트 할 때는 몰랐는데 프론트 쪽에서 동시에 파바바박 둘다 동시에 호출했는데 세상에나... 같은 openapiId를 가지고 있는 프로그램이 두개씩 저장되는 경우가 있는게 아니겠습니까??(원래는 saveMovie 에서 program 에서 openapiId를 통해 조회하고 조회결과가 있는 경우에는 그 조회한 결과를 반환하지만 그렇지 않은 경우 저장해서 반환하고 있습니다). 그래서 @transactional 에 대해 제대로 이해를 못하고 있다고 생각했습니다. 당연하게 여겼던 것 1) @tranactioanl 은 public 에 선언이 가능하고 거기 안에 t사용된 private 함수도 역시 @transactioanl 이다. 2) @transactional 이 붙은 것은 하나가 끝나면 처리되게 lock 이 걸릴 것이다. 이렇게 넘어갔었는데 어느 내용에서 제가 놓치고 있는게 있는지 알려주시면 감사하겠습니다! ㅠㅠㅠㅠㅠㅠㅠㅠㅠ

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
dionisos198 댓글 1 좋아요 0 조회수 337

Entity와 MySQL 매핑 관련 질문 드립니다.

해결됨

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

안녕하세요. Spring Boot 3.2.2 + MySQL 8.0 환경에서 JPA 학습 중 질문이 있습니다. Entity가 Enum 타입인 경우, MySQL Column 매핑은 어떤식으로 되어야 Best Practice 일까요? 학습 과정 중에서는 `@Column(columnDefinition = "char(1)")` Annotation으로 매핑 문제를 해결했습니다. 실무에서는 어떤 방식으로 정의하는지 알고 싶습니다. (e.g. Column 타입을 varchar(255)로 정의해서 사용한다. 아니면 DB 타입에 맞춰 Entity 정의하여 사용한다.) Entity에서 사용된 Enum의 경우 'Y', 'N' 값만 정의되어 있습니다. public enum BasicStatus { Y, N } MySQL Field 타입은 char(1)로 정의되어 있습니다. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Destination extends BaseDatetimeEntity { // ... 중략 @Enumerated(EnumType.STRING) @Column(columnDefinition = "char(1)") private BasicStatus apartment; } Table을 직접 DDL로 생성 후, ddl-auto 옵션을 validate로 설정하여 서버를 실행하면 "Schema-validation: missing table [destination_seq]" 에러가 발생합니다. 해당 문제를 해결하기 위해 어떻게 접근하면 될까요? 그리고 실무에서는 Table 생성 시, JPA를 통한 생성을 하는 지 DDL로 생성하는지 궁금합니다. (DB 학습이 부족한 상황에서 질문 드리는 점 양해 부탁드립니다.) Entity @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; // ... 중략 @OneToMany(mappedBy = "member") private List<Destination> destinations = new ArrayList<>(); } @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Destination extends BaseDatetimeEntity { @Id @GeneratedValue @Column(name = "destination_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; // ... 중략 } DDL create table member ( member_id bigint unsigned auto_increment comment '회원 ID', # ... 중략 primary key (member_id) ); create table destination ( destination_id bigint unsigned auto_increment comment '배송지 ID', member_id bigint unsigned not null comment '회원 ID', # ... 중략 primary key (destination_id), foreign key (member_id) references member(member_id) ); Error Log org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [destination_seq] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1773) ~[spring-beans-6.1.3.jar:6.1.3] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) ~[spring-beans-6.1.3.jar:6.1.3] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-6.1.3.jar:6.1.3] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.1.3.jar:6.1.3] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.3.jar:6.1.3] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.1.3.jar:6.1.3] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.1.3.jar:6.1.3] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1231) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:949) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.context.support.AbstractApplicationContext.__refresh(AbstractApplicationContext.java:624) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.context.support.AbstractApplicationContext.jrLockAndRefresh(AbstractApplicationContext.java:41002) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:42008) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.2.jar:3.2.2] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.2.2.jar:3.2.2] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.2.2.jar:3.2.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) ~[spring-boot-3.2.2.jar:3.2.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) ~[spring-boot-3.2.2.jar:3.2.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-3.2.2.jar:3.2.2] at kr.co.asasac.Application.main(Application.java:10) ~[main/:na] Caused by: jakarta.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [destination_seq] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421) ~[spring-orm-6.1.3.jar:6.1.3] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-6.1.3.jar:6.1.3] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) ~[spring-orm-6.1.3.jar:6.1.3] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1820) ~[spring-beans-6.1.3.jar:6.1.3] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1769) ~[spring-beans-6.1.3.jar:6.1.3] ... 18 common frames omitted Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [destination_seq] at org.hibernate.tool.schema.internal.AbstractSchemaValidator.validateTable(AbstractSchemaValidator.java:134) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final] at org.hibernate.tool.schema.internal.GroupedSchemaValidatorImpl.validateTables(GroupedSchemaValidatorImpl.java:46) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final] at org.hibernate.tool.schema.internal.AbstractSchemaValidator.performValidation(AbstractSchemaValidator.java:97) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final] at org.hibernate.tool.schema.internal.AbstractSchemaValidator.doValidation(AbstractSchemaValidator.java:75) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final] at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:295) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final] at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:145) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final] at java.base/java.util.HashMap.forEach(HashMap.java:1429) ~[na:na] at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:142) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final] at org.hibernate.boot.internal.SessionFactoryObserverForSchemaExport.sessionFactoryCreated(SessionFactoryObserverForSchemaExport.java:37) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final] at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final] at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:315) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final] at org.hibernate.boot.internal.SessionFactoryBuilderImpl.__build(SessionFactoryBuilderImpl.java:450) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final] at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:41010) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.__build(EntityManagerFactoryBuilderImpl.java:1507) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:40002) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final] at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.__createEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) ~[spring-orm-6.1.3.jar:6.1.3] at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:40003) ~[spring-orm-6.1.3.jar:6.1.3] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.__createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) ~[spring-orm-6.1.3.jar:6.1.3] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:45002) ~[spring-orm-6.1.3.jar:6.1.3] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-6.1.3.jar:6.1.3] ... 22 common frames omitted 감사합니다.

  • spring-boot
  • jpa
  • mysql
Anonymous 댓글 3 좋아요 0 조회수 915

인기 태그

인프런 TOP Writers

주간 인기글