월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@Embedded 유무 차이
Address에 @Embedded 붙히든 안붙히든 h2에 테이블에는 차이가 전혀 없는데 어떻게 이해해야 할까요? 쓰고 안쓰고의 차이가 뭘까요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
블로그 기술
김영한 님의 강좌를 쭉 따라 공부중인데 뭔가 강의 소스를 블로그에 정리해도 될지 몰라서 노션에만 정리해놨는데요,..! 이직 준비하면서 꾸준함을 나타내고 싶어서 블로그에 차근차근 올려보려는데 어느정도 까지 올려도 되는지 궁금합니다
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
자막 관련 기능
안녕하세요 혹시 자막 관련 기능은 지원하지 않는지, 궁금합니다.청력이 좋지가 않아서 듣고는 있는데 약간 애로사항이 생기네요.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
설정 파일 관리 방법 질문(spring X)
기존 프로젝트(spring X)에 jpa를 적용하는 중인데, persistence.xml 파일로 설정 후Persistence.createEntityManagerFactory("test");호출 시 아래의 예외가 발생하는 이슈가 있습니다.java.lang.NoSuchMethodError: org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar([Lorg/apache/xerces/xni/parser/XMLInputSource;)Vxml 파싱 중 프로젝트에서 사용중인 xerces...jar 파일과 jdk의 rt.jar가 충돌되어 메서드를 찾지 못하는 현상으로 파악중입니다. (일반적인 jpa 예제에서는 rt.jar를 참조해야하지만, 해당 코드에서는 xerces...jar를 참조함)해당 라이브러리를 걷어내기엔 기존 코드의 dependency가 염려되어 다른 파일(yml/properties)로 설정을 관리할 수는 없을까 싶은데, 검색 결과는 대부분 spring jpa 관련 내용이었습니다.jpa 설정 시 xml 파일이 아닌, yml 또는 properties 파일로 관리하는 방법이 있는지 궁금합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티 매니저 프록시 역할
안녕하세요! 질문 좀 드리려고 합니다엔티티 매니저 프록시는 프록시를 싱글톤으로 주입해서 동시성 문제를 해결하고 실제 엔티티 매니저 인스턴스를 ThreadLocal로 관리하는 역할 정도로 생각해도 괜찮을까요?추가적으로 실제 엔티티 매니저는 @Transactional을 사용하면 JpaTransactionManager에서 생성이 되는데 @Transactional을 사용하지 않으면 처음 엔티티 매니저를 사용할 때 생성이 되나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
단건조회시 fetch를 이용했을때 쿼리개수와 성능이 궁금합니다.
long startTime = System.currentTimeMillis(); BoardResponse.Detail response = boardService.findBoard(board.getId()); long endTime = System.currentTimeMillis(); // then System.out.println(endTime - startTime);해당 코드에서 findBoard Service는 게시글의 힌트, 태그, 정답, 공감을 가져와 DTO의 변환을 거쳐 하나의 게시글을 단건조회하는 서비스입니다.다만 여러 케이스로 테스트했는데단순히 findById로 로직을 테스트를 하게되면 해당 findBoard는 60~90ms의 실행속도와 쿼리가 지연로딩으로 인해 5개가 나가지만JPQL을 통해 DTO를 직접 접근하는 식으로 바꿨을땐, 쿼리를 1개로 나가지만 실행속도가 250~290ms가 나오게 되는데 단건조회의 경우 fetchJoin이나 join+DTO 방식을 쓰는것보다 지연로딩이 있더라도 일반적인 findById를 사용하는것이 좋은지 여쭤봅니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티 객체 생성시 생성자 방식 VS Builder() 패턴 방식
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]두 객체 생성 방식의 차이를 간단하게 비교해서 알아본 결과 Builder 패턴을 이용하면 가독성이 좋아져서 Builder 패턴을 이용해 객체를 생성하는 것이 좋다VSBuilder 패턴은 코드가 복잡해지고 생성자 보다 성능이 떨어지므로 생성자 방식으로 개겣를 생성하는 것이 좋다.위와 같은 결론을 얻었습니다.이렇게만 보면 코드를 작성하는 사람의 차이인거 같은데실제 현업에서는 어떤 방식을 주로 사용하거나 선호하나요 ??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
다대다 관계 까지 수업듣고 질문 드립니다. (fk를 pk설정)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]예시로 드신 Member_Product 테이블의 관계는 주문 테이블이라고 이해가 되는데 이럴경우에는 fk 2개를 pk설정을 하면 중복된 값이 못들어와서 당연히 기본키를 하나 만들어 주는걸로 배웠는데 만약에 주문이 아니고 수강테이블처럼 중복된 값을 막아야 하는 경우에도 테이블 내에 pk를 하나더 만들어 주는게 맞을까요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
jpa 영속성 컨텍스트 질문입니다.
em.persist(member1); em.persist(order1); em.persist(order2); em.flush(); em.clear(); <-- order1 내용 변경 --> em.persist(order1); tx.commit()flush와 clear까지 하면 db에 반영은 되어있고 order1의 내용을 조금 바꾼뒤 persist하면 1차 캐시에 올라가있을텐데, commit을 하면 실제 db에 아무것도 뜨지 않습니다.em.clear 주석 하고, 내용 변경 후 em.persist의 유무와 상관없이 db에 잘 반영이 됩니다.clear와 persist 사이의 무슨 관계가 있는 것 같은데, db에 아무것도 뜨지 않는 이유가 뭔가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계 편의 메서드 하는 이유
안녕하세요, 양방향 연관관계 편의 메서드를 하는 이유는 순수한 객체 상태에서 봤을 때 양쪽에 값이 있어야 하기 때문인걸로 이해를 했습니다.order와 member가 다대일인 관계라 했을 때,보통 멤버를 db에서 find해서 쓸텐데, 이러면 member에서의 orderList를 가지고 오려면 연관관계 편의 메서드 와는 상관없이 db에서 join을 해서 가지고 오더라구요,,보통 프로젝트나 현업에서 순수한 객체 상태에서 쓸 일이 있나요?아니면 연관관계 편의 메서드를 썼을 때 다른 이점이 있나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
도와주세요...
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 제가 야생형으로 들어서 실습을 먼저해서 h2를 다운 받았는데 또 받아야 하나요???일단 안받고 햇는데 이렇게 빨간줄이 뜹니다 무엇이 문제일까요 ?>??ㅜㅜㅜ
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
따라했는데 오류가 떠요
이렇게 main이 빨간줄이 뜨고 이것도 복붙을 했는데 이렇게 떠요ㅠ
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계 편의 메서드 관련 질문입니다.
member가 새로 생기면 해당 Team에 있는 List<Member> members에 member를 값을 넣어주는 연관관계 편의 메서드가 있다고 할 때, team.getMembers()를 하면 원래는 db에서 join을 한 뒤 해당하는 팀의 멤버들이 리스트에 담겨 반환되는거 같은데, 직접 리스트에 멤버들을 넣어주어서 이미 리스트에 멤버들이 있을텐데 이것들을 반환해주는건가요?질문1. 연관관계 편의 메서드가 없었다면 db가 join을 해서 해당하는 team의 멤버들을 리스트에 담아서 반환해주는 것이 맞나요?질문2. 연관관계 편의 메서드로 내가 해당 team 리스트에 멤버들을 넣어주었으면 db에 갈 필요 없이 넣어준 것들을 그대로 반환하는 건가요?질문3. 그렇다면 db에 들어갈지 안들어가고 리스트에 담아놓은 것들을 반환할지는 jpa가 어떻게 판단하나요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
상속관계 매핑 관련 질문 드립니다.
안녕하세요.먼저 항상 좋은 강의를 내주셔서 정말 감사합니다제가 요번에 실무에서 처음 JPA를 경험을 하게 되었고, 운이 좋게 특정 도메인의 테이블 설계도 진행을 하게 되었습니다.고민을 하던 중, 이전 JPA 강의에서 상속 관계 매핑을 본적이 있어서 해당 부분을 적용을 하여 먼저 테스트를 해보는 중 정말 어떻게 풀어가야 할지 모르는 부분이 있어서 질문을 드리게 되었습니다.상단 캡쳐 화면 처럼 테이블 생성 후, 각각 서브 타입의 Repository 를 만들어서 클라이언트에 넘어온 DTYPE을 통한 분기를 통해서 필요한 서브타입의 Repository 를 이용하여 조회 및 저장을 하는 방식으로 하였습니다. 그런데 해당 테이블이 다른 업무에도 많이 사용이 될 테이블이라 코드가 복잡해질 걱정이 되었습니다.해당 부분을 어떤 방식으로 풀어나가야 할지를 모르겠습니다. 해당 부분을 실무에 적용을 하게 될 때 복잡하게 될 거 같으며 이 부분을 어떻게 실무에서 녹여야 할지를 모르겠습니다. 영한님의 경우 상속 관계 매핑을 실무에서 어떻게 사용을 하시는지 궁금합니다. 연관된 테이블들 중 공통적인 부분이 있고, 서로 다른 컬럼이 있을 때, Inheritance 를 통한 상속 관계 매핑 말고 다른 쉬운 방법으로 풀 수 있는 방법이 있는지 궁금하여 질문 드립니다.두서 없는 글 읽어주셔서 감사합니다.항상 영한님의 강의를 통해서 정말 많은 도움을 받고 있습니다. 감사합니다좋은 하루 보내세요!!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
네이티브 쿼리로 특정 값만 가져오기
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]네이티브 SQL 소개란에 String sql="select ID,AGE,TEAM_ID,NAME FROM MEMBER WHERE NAME='kim'";List<Member> resultList=em.createNativeQuery(sql,...으로 되어있는데 저희가 JPQL에서는 SELECT m.username,m.age 를 DTO로 활용해서 그 결과를 얻었지 않습니까?혹시 native query라서 되는지 확인해보았는데 Member member=new Member(); member.setUsername("lee"); member.setAge(25); Member member1=new Member(); member1.setUsername("kim"); member1.setAge(30); em.persist(member);em.persist(member1); List<Member> members=em.createNativeQuery("select USERNAME,AGE from MEMBER",Member.class).getResultList(); for (Member member2 : members) { System.out.println(member2.getAge()+member2.getUsername()); }Native QUery에 대한 예제가 잘 못된건가요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
준영속 상태 실무 사용경우
안녕하세요, 준영속을 공부하다가 궁금한것이 생겼는데 혹시 실무에서 준영속 상태를 사용하는 경우는 어떤 경우인지 알 수 있을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
team.getId 부분이 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]Team team = new Team(); team.setName("TeamA"); System.out.println("team.getId = " + team.getId()); em.persist(team); System.out.println("team.getId = " + team.getId()); //이 부분이 궁금합니다 db에 넣질 않아서 id 값이 생성이 안되었을텐데 어떻게 id값을 가져오는건가요?여기서 보면 em.persist 이전에 시도한 team.getId는 null값이 나오는데(team.getId = null)persist 이후에 시도한 team.getId는 값을 얻을 수 있었습니다.(team.getId = 1) 영속성 컨텍스트에만 넣고 db에 commit은 하지 않았기에 id값이 아직 생성조차 안되었을텐데 어떻게 아이디 값이 나오는지 궁금합니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
1차 캐시와 트랜잭션 격리 수준
영속성 컨텍스트 부분을 공부하다가 의문이 생겨 질문 남깁니다.PPT를 보면 '1차 캐시로 반복 가능한 읽기(REPEATABLE READ) 등급의 트랜잭션 격리 수준을 데이터베이스가 아닌 애플리케이션 차원에서 제공'이라고 나와 있습니다.그런데 제가 생각하기로는 트랜잭션 커밋을 하기 전까지는 1차 캐시에서만 엔티티를 조회하기 때문에 같은 이유로 팬텀 리드 현상도 일어나지 않을 것 같습니다.팬텀 리드 현상이 일어나지 않는다고 가정할 때, 팬텀 리드 현상이 일어나지 않음에도 불구하고 SERIALIZABLE 등급이 아닌 REPEATABLE READ 등급의 트랜잭션 격리 수준을 제공한다고 표현한 이유는 팬텀 리드 현상이 일어나지 않지만 SERIALIZABLE은 아닌 예시가 존재하기 때문일까요?즉, 제가 SERIALIZABLE 레벨을 단순히 'Dirty Read, Non-repeatable read, Phantom read 현상이 발생하지 않는 레벨'로 이해하고 있는게 잘못된 걸까요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
h2 엔티티 적용 안 됩니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]현재 인텔리제이에서는 뭔가 잘 된 것처럼 나오고 있지만 h2 에서는 엔티티가 적용이 안 되는 상태입니다 .위 그림처럼 제대로 잘 적용이 되어 보이지만코드를 실행하고 난 다음의 h2는이렇게 어떤 엔티티도 적용이 되지 않은 모습입니다. 코드는 정말 강의 보고 똑같이 따라 쳤습니다..ㅠㅠ 실행시켰을 때는 콘솔 창이 이런 문구들이 뜹니다. /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=58478:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/imjeong-u/Downloads/jpashop/target/classes:/Users/imjeong-u/.m2/repository/org/hibernate/hibernate-entitymanager/5.3.10.Final/hibernate-entitymanager-5.3.10.Final.jar:/Users/imjeong-u/.m2/repository/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final.jar:/Users/imjeong-u/.m2/repository/org/hibernate/hibernate-core/5.3.10.Final/hibernate-core-5.3.10.Final.jar:/Users/imjeong-u/.m2/repository/org/javassist/javassist/3.23.2-GA/javassist-3.23.2-GA.jar:/Users/imjeong-u/.m2/repository/antlr/antlr/2.7.7/antlr-2.7.7.jar:/Users/imjeong-u/.m2/repository/org/jboss/jandex/2.0.5.Final/jandex-2.0.5.Final.jar:/Users/imjeong-u/.m2/repository/com/fasterxml/classmate/1.3.4/classmate-1.3.4.jar:/Users/imjeong-u/.m2/repository/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.jar:/Users/imjeong-u/.m2/repository/org/dom4j/dom4j/2.1.1/dom4j-2.1.1.jar:/Users/imjeong-u/.m2/repository/org/hibernate/common/hibernate-commons-annotations/5.0.4.Final/hibernate-commons-annotations-5.0.4.Final.jar:/Users/imjeong-u/.m2/repository/javax/persistence/javax.persistence-api/2.2/javax.persistence-api-2.2.jar:/Users/imjeong-u/.m2/repository/net/bytebuddy/byte-buddy/1.9.5/byte-buddy-1.9.5.jar:/Users/imjeong-u/.m2/repository/org/jboss/spec/javax/transaction/jboss-transaction-api_1.2_spec/1.1.1.Final/jboss-transaction-api_1.2_spec-1.1.1.Final.jar:/Users/imjeong-u/.m2/repository/com/h2database/h2/1.4.199/h2-1.4.199.jar:/Users/imjeong-u/.m2/repository/javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar jpabook.Main5월 22, 2023 4:27:50 오전 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformationINFO: HHH000204: Processing PersistenceUnitInfo [name: hello...]5월 22, 2023 4:27:50 오전 org.hibernate.Version logVersionINFO: HHH000412: Hibernate Core {5.3.10.Final}5월 22, 2023 4:27:50 오전 org.hibernate.cfg.Environment <clinit>INFO: HHH000206: hibernate.properties not found5월 22, 2023 4:27:50 오전 org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>INFO: HCANN000001: Hibernate Commons Annotations {5.0.4.Final}5월 22, 2023 4:27:50 오전 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configureWARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)5월 22, 2023 4:27:50 오전 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001005: using driver [org.h2.Driver] at URL [jdbc:h2:tcp://localhost/~/jpashop]5월 22, 2023 4:27:50 오전 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001001: Connection properties: {user=sa}5월 22, 2023 4:27:50 오전 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001003: Autocommit mode: false5월 22, 2023 4:27:50 오전 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>INFO: HHH000115: Hibernate connection pool size: 20 (min=1)5월 22, 2023 4:27:50 오전 org.hibernate.dialect.Dialect <init>INFO: HHH000400: Using dialect: org.hibernate.dialect.H2Dialect5월 22, 2023 4:27:51 오전 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stopINFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/jpashop]Process finished with exit code 0쿼리 문이 안 나오는걸 봐서는 잘 안되고 있긴 합니다.. 근데 어디서 문제인지 잘 모르겠습니다 정말 도저히 모르겠습니다... 몇 시간째 보고 있는지도 모르겠습니다.. 너무 스트레스네욤..ㅠㅠ
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성전이 관련 질문
안녕하세요. 전 현재 queryDSL 강의까지 듣고 몇달간 프로젝트를 진행중인 학생입니다.이번에 맞닥뜨리게된 문제가 특이해서 질문 남겨봅니다.다름이 아니라 CascadeType을 지정하지 않은 상태에서 데이터를 DB에 저장했었습니다.당시엔 flag를 통한 delete를 기능에 담아내고 있었기 때문입니다.하지만 시간이 흘러 delete를 해야할 타이밍이 와서 기능을 구현하는데의존성 때문에 부모 객체가 삭제될 수 없다며Connection org.postgresql.jdbc.PgConnection@37333b1f marked as broken because of SQLSTATE(08006), ErrorCode(0) 에러가 나며 에러를 띄웠습니다.아무리 찾아봐도 CascadeType을 통해 JPA에서 영속 상태를 정한다고만 하고Bard, ChatGpt, Bing 등 비슷한 답을 줬습니다.서비스 전의 DB라 DB에 있던 튜플들을 전부 삭제하는 것으로 해결했으나 궁금증은 여전히 해결되지 않았습니다.CascadeType을 지정하지 않았을 때 저장된 값은 CascadeType.ALL로 바꿨을 때도 영속상태로 들어가질 않나요?만약 그렇다면 해당 값이 어떻게 CascadeType이 지정되기 전에 저장됐는지 아닌지 알 수 있는 건가요?