묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
@GeneratedValue(strategy = GenerationType.IDENTITY) 변경후 실행오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@GeneratedValue어노테이션을 설명에 맞게 바꾸다가 IDENTIFY로 변경후에 아래와 같이 메시지가 발생합니다.ERROR: NULL not allowed for column "ID"; SQL statement:소스는 아래와 같습니다.//Member.java@Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; //.. }Persistence.xml<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"> <persistence-unit name="hello"> <properties> <!-- 필수 속성 --> <!--생략...--> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <!-- 옵션 --> <!--생략...--> <property name="hibernate.hbm2ddl.auto" value="create" /> </properties> </persistence-unit> </persistence>//Main메서드 내용입니다 public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); //위에 메니저팩토리를 불러오는순간 웬만한 작업 가능. EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try{ Member member = new Member(); member.setName("CCCC"); System.out.println("============start=========="); em.persist(member) ; System.out.println ("member.getId() = " + member.getId()); tx.commit(); //...생략h2콘솔에서 테이블은 정상적으로 생성되어있는 상태입니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
aws 서버 비용문제 질문드립니다.
서버 인스턴스를 만든 상태에서 인스턴스 비용이 발생하지 않도옥 중간에 잠시 멈춰둘순없나요??
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
flush() 쓰기 지연 SQL 저장소 비우나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]비울 지.. 안 비울 지..전송해 버려서 가지고 있을 필요가 없는 것 같으면서도..그렇다고 그게 그렇게 큰 메모리는 차지하고 있지는 않을 거기 때문에..가지고 있는 이점이 뭔지는 모르겠지만, 뭔가 이점이 있어서 안 지울 것 같기도 하고..
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Category
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]Category 에 parent와 child의 역할이 뭔지 수업을 듣고도 잘 모르겠습니다 단순히 부모카테고리 자식카테고리로 알고있으면 되는걸까요? 이렇게 만들면 연결된 items 하고도 부모카테고리와 자식카테고리가 어떻게 엮이는지 잘 이해가 안갑니다
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 컨텍스트 쓰기 지연 SQL 저장소
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]persist 하면 캐시에 저장됨과 동시에 그 내용이 SQL로 해석되어 쓰기 지연 SQL 저장소에 저장되잖아요.그런데 중간에 영속화 했던 것의 값을 바꾸면 updata문이 또 추가가 될거 잖아요. (커밋 시점에 비교하는 거니 한번만. 물론 보통 persist 전에 모든 작업을 끝내놓는게 바람직 하지만)그런 것 보다는 차라리 캐시 될 때 쓰기 지연 SQL 저장소에다 SQL문으로 해석하여 저장하는 것 보다,커밋 순간에 캐시에 있는 내용들을 SQL문으로 해석하는 것은 별로일까요?그러니까, member 객체를 select문에서 가져온거면 enum.select, 새로 생성한 거면 enum.create라고 해서 추가로 그렇게 묶어서,캐시에 저장할 때는 원래 member 객체 reference를 가지고 있도록 한 다음 객체 하나로 감싸서 저 enum을 가지고 있게 한다던지,(초기상태 캡쳐도 한다고 했는데, 그럼 원래 이런 식인건가..? Member prototype 해서..?)마지막에 commit 순간에 영속성 컨텍스트를 읽어 SQL문으로 해석하고 만약 enum.create면 그냥 최신값 그대로 쿼리문으로 만들어서 날리면 되고update면 현재값 그대로 날리면 되고select면 이거는 똑같고. 전체적으로 보니 그냥 이거 모두를 select 처럼 commit 시점에 한번 확인만 하고 영속성 컨텍스트에 있는 모두를 한번에 쿼리로 바꿔 내보내는 것이요. 근데 이거 아직 join 이런 게 잘 몰라서 그런 쪽에서 문제가 있을 수 있겠나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
하나의 데이터베이스 서비스에 각각 다른 데이터베이스간 엔티티 관계설정이 가능한지 궁금합니다.
질문드립니다. 각각 다른 데이터베이스에 있는 테이블을 엔티티로 만들어서 둘간의 관계를 구성할 수 있을까요? 조금 더 설명을 드려보면하나의 MySQL 서비스에 A1 이라는 DB 와 A2 라는 DB 를 각각 만들어서 운영중이라고 하면A1.Table1 과 A2.Table2 가 각각 엔티티로 구성되고, 그것의 관계설정에는 문제가 없는지가능하다면 어떤 방법을 사용하면 좋을지 궁금합니다.단 DB 에 연결되는 계정은 두개의 DB (A1, A2) 모두에 권한을 가지고 있는 상황입니다. 혹시 방법이 있을지 문의드립니다.감사합니다.
-
미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
2-4 수정중 오류
안녕하세요 쥬쥬님 강의 너무 잘 듣고 있습니다 제가 따라가는건 잘했는데 지금 AGE 부분이 프라이머리 키로 지정이 되어있는 것 같은데 어디서 부터 잘못된건지 모르겠습니다...
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Category-Item의 다대다 관계에 대한 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]다대다 관계는 실무에서 한계가 크다는걸 배우고 다대일 일대다 관계로 중간엔티티 CategoryItem을 만들어서 해보려고 하는데 그떄 어떻게 연관관계를 짜면 될까요?어떤컬럼을 어떤식으로 받아오면되는지 헷갈립니다...
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
SystemUuidHolder를 테스트하는 경우
Interface를 이용하여 완충재를 두고 테스트를 할 때는 테스트를 위한 mock 구현체를 이용하여 final 메소드를 stub하는 것을 피한다는 것은 이해를 했는데요. 갑자기 드는 생각이 결국 프로젝트가 배포될 때는 SystemUuidHolder라는 구현체를 사용하게 되고 그러면 해당 클래스의 대한 테스트도 진행해야 하나요? 진행한다면 해당 클래스는 UUID를 사용하고 있으니 final 메소드를 stub하는 상황을 피할 수 없게 되는건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Fetch Join된 Table과 Fetch Join
안녕하세요. 회사 신규 프로젝트로 Spring Boot와 JPA를 이용해 백엔드를 개발하고 있는 직장인입니다.원래 C#개발자다 보니 수업을 들으며 차근차근 따라가 보지만 의외의 경우가 발생해 힘들지만좋은 강의에 항상 재밌게 배우고 있습니다. 이번에 문의드릴 내용은 fetch join된 table에 다시 fetch join 하는 방법에 대해 문의 드리고자 합니다. 문제의 테이블 구조입니다.Count Table과 Contract Table은 company_code라는 pk로 N:1구조Contract Table은 Company Table과 company_code라는 pk로 N:1구조로구성돼 있습니다. 그리고 Count, Contract Table은 매핑되는 키에 대해서 FetchType을 Lazy로 설정한 상태입니다. 저는 여기서(JPQL기준) Count Table을 기준으로 Contract Table까지는 fetch join에 성공했지만 추가로 Company관련 쿼리가 N+1처럼 추가됐습니다. 혹시 제가 JPQL혹은 Query DSL방법으로 Contract Table과 Company Table을 fetch join 처리 후 다시 Count Table과 fetch join해 쿼리 하나로 해결 할 수 있는 방법이 있을까요? 감사합니다. :D
-
미해결실전! 스프링 데이터 JPA
Pageable에서 sort 내부 property에 대한 유효성 검사
안녕하십니까 영한님.강의 유익하게 잘 들었습니다. 덕분에 궁금증이 많이 해결되었습니다.다름이 아니라, 제가 Pageable를 사용한 페이징 기능을 테스트 해보는 과정에서 sort의 property에 실질적인 entity 정보가 노출된다고 생각되어 고민에 빠진 상태입니다. 페이징 관련된 파라미터를 dto로 받게되면 유효성 검사는 가능하나 sort의 순서를 보장하기 어려워 추가적인 파라미터가 필요하다고 생각됨.pageable로 받은 후 for문을 돌려 유효성 검사를 하게 되면 하위의 단계로 나눠지는 불편함 1) controller에서 dto로 유효성 검사를 위한 for문 2) entity는 service에서만 사용하게끔 유도하기 위해 controller에서는 유효성 검사가 끝난 dto를 service로 넘겨서 entity로 재조립하는 for문등등 여러가지 방법들을 고민해보다 질문드립니다.실질적으로 실무에서 사용되는 Paging 기법이 있거나 개선 사항이 있으면 공유해주시면 감사하겠습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
5분 2초에 제 코드에서 Team 쿼리가 안나갑니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]저는 강의 처럼 select m from Member m inner join m.team t 해도 Team 조회쿼리가 추가로 발생 안하고, select m from Member m inner join m.team t 해도 추가쿼리 발생안하는데 혹시 그사이에 hibernate 업데이트 되었을까요..? 아니면제가 먼가 잘못친게 있을까요? manytoone에 fetchtype 아무것도 안써놨는데도 그렇네요, query 작성하는 라인 전에 em.flush, em.clear 다 하는데도 team 쿼리가 안나가요
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
혹시 서비스에서 관련 레포지토리말고 다른 레포지토리를 의존해서는 안되는 이유가 뭘까요???
[질문 내용]안녕하세요 강사님!! MemberService에 MemberRepository와 LogRepository를 의존하는 걸 보면서 궁금증이 생겨서 질문 드립니다! 회사에서 일 할 때,하나의 서비스에는 관련 레포지토리만 의존하고필요하다면 다른 레포지토리는 직접 의존하지 말고 서비스를 통해서 해결하라는 말을 들어서 그렇게 코드를 짜왔습니다. 만약 다른 레포지토리를 의존해야 한다면 컨트롤러에서 하라고 들었던 것 같습니다. 예를 들면 MemberService에서는 MemberRepository만 의존하고LogRepository의 메소드가 필요하다면 LogService를 의존해서 LogServerce.메소드 이런식으로 불러왔습니다. 혹시 이런 식으로 다른 레포지토리를 의존하지 말고 서비스를 의존해야 하는 이유가 무엇인지 이유를 알 수 있을까요???단순히 계층구조를 지키기 위해서 인가요???
-
해결됨JPA & Spring Data JPA 기초
7강에서 SecondaryTable을 왜 사용하지 모르겠습니다.
왜 SecondaryTable을 사용하는지 이해가 잘 안됩니다.예시가 writer라는 엔티티 클래스에 엔티티가 아닌 클래스 2개 각각을 하나의 타입으로해서writer라는 테이블의 속성으로 사용하는 것으로 이해되었습니다.그럼 6강에서 배운것 처럼 그냥 WriterInfo와 Address 클래스는 @Embeddable를 선언하고writer클래스에서@Embedded private Address addr;@Embedded private WriterInfo info;이렇게 해서 사용해도 될거 같다고 생각합니다.제가 제대로 이해하고 있는지가 궁금하고 혹시 이렇게 사용하지 않는 이유가 있는지 궁금합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
pring security관련 질문드려요
저는 msa 구축된 서비스를 인수인계 받아 이해하려고 해당 강의를 듣고있습니다.때문에 지금 강의와 함께 진행중인 공부용 project하나, 운영되고 있는 project하나를 로컬소스로 가지고있는데요.spring secure cofig만 구현해주면 공부용 project에서 구동한 eureka에서 -> 운영project의 microservice가 연동이 됩니다.그리고 eureka서버 콘솔에는 8761로 연결실패했다고 뜹니다(처음에 8761로 공부했다가 7777로 변경) 디펜던씨와 websecurity java를 주석처리하면 정상동작합니다.. 왜그런건가요..도대체.. ? [공부project]Eureka(port:7777)-> gateway(port:8000) -> userservice(port: random)[운영project]gateway(port: 80) -> microservice1(8001)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
간단한 주문 조회 V1: 엔티티를 직접 노출 관련 오타있어서 질문드립니다.
pdf 14페이지에서 order -> address가 아니라 order -> delivery가 아닌가요?order 클래스를 확인해봤는데, 지연 로딩에 해당하는 부분은 member 하고 delivery입니다.
-
미해결실전! Querydsl
QuerydslApplicationTests 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not prepare statement Caused by: org.hibernate.exception.SQLGrammarException: could not prepare statement Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Sequence "HIBERNATE_SEQUENCE" not found; SQL statement:call next value for hibernate_sequence [90036-199] h2는 1.4.199 사용중이며 application.yml파일도 똑같이 했는데 계속 저런 오류가 뜹니다..
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
잘 이해가 가지 않아서 여쭤봅니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]스프링부트 + JPA 1편에 이어서 하시는것 같은데 controller 모델이 있지만 api Controller를 다시 만들어서 사용하는 이유가 무엇일까요? 따라하고나서 배운것을 찬찬히 보고있는데 개념이 헷갈립니다
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계와 연관관계의 주인 2 -주의점, 정리 (재질문, 내용 보강)
안녕하십니까 선생님 다름이아니오라 em.flush(), em.clear()를 했을 때와 안했을 때 query를 호출하는 경우와 호출되지 않는 경우에 대해서 이해가 잘 되지 않아 질문드립니다. Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setUsername("member1"); member.setTeam(team); em.persist(member); em.flush(); em.clear(); Team findTeam = em.find(Team.class, team.getId()); List<Member> members = findTeam.getMembers(); for (Member m : members) { System.out.println("m = " + m.getUsername()); } tx.commit(); 위 코드에서em.flush(); em.clear();이 경우에서 em.flush(), em.clear() 를 하지 않으면 컨텍스트에 올라간 객체들은 Team(member 없음), Member 이렇게 존재하게 되는데,em.find(Team) 을 통해서 얻어온 Team에는 Member가 없는 상황이라고 생각합니다.이후 team.getMembers() 를 진행하면 Member 가 없는 상황이기에 쿼리가 발생하면서 DB에서 조회할 것 이라고 생각하나, 쿼리를 실행하지 않고 바로 요소가 비어있는 Persistentbag(Collection 구현체) 를 반환합니다.그렇기 때문에 for ( var m : team.getMembers() ) 을 순회하면 team.getMembers() 가 비어있기 때문에 반복문이 실행되지 않아 표준출력이 발생하지 않습니다.이와 마찬가지로 em.flush(), em.clear() 를 해줬을 때, em.find()를 통해 team을 호출하면 team 객체를 가져오는 쿼리를 실행하게 되는데, 이때도 team 에대한 정보만 조회하기에 Team에는 Member가 없는 상황이라고 생각합니다.이후 team.getMembers() 를 하면 마찬가지로 Persistentbag(Collection 구현체) 을 반환하는데 이 비어있는 Collection 에 대해서 for ( var m : team.getMembers() ) 을 진행하면 member에 대한 query를 진행하여 member정보를 얻어옵니다.정리해보자면 em.flush(), em.clear() 한 경우와 안한 경우 모두 team.getMembers()의 반환값으로 빈 Persistentbag 을 반환하는데, 어떤 기준으로 동작방식이 (쿼리가 실행되고 안되고) 달라지는지 궁금합니다ㅠ추측을 해보자면...em.flush(), em.clear() 한 경우에는Persistentbag<ProxyMember> 이고em.flush(), em.clear() 안한 경우에는Persistentbag<Member> 이고,Persistentbag.iteration() 함수 내부에서<E> 가 ProxyMember 일 경우에 hasNext() == false 면 Query 를 진행해서 db에서 조회 해보고,<E> 가 Member(순수한 객체) 일 경우에는 hasNext() == false 면 그냥 query없이 return 하게되는 걸까요..?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
38분쯤 Member와 AddressEntity 중 연관관계 주인을 Member로 한 이유가 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@Entity public class AddressEntity { //... } // 2. Member에 단방향 연관관계 매핑 @Entity public class Member { //... @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) @JoinColumn(name = "MEMBER_ID") private List<AddressEntity> addressHistory = new ArrayList<>(); }테이블의 경우 "다"쪽인 ADDRESS에 MEMBER의 외래키가 있습니다. 이 경우 Address가 연관관계의 주인이 되는 것을 권장되는 것으로 알고 있습니다. 하지만 이번 예제의 경우, "일"인 Member가 주인으로 설정된 이유가 무엇인가요? member를 주인으로 함으로써 AddressEntity의 생명주기를 함께 관리하기 위함인가요?