월 18,150원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
insert 할때 개인적인 질문입니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 영한님은 값 넣으실때 예를들어14:25 같이member.getFavoriteFoods().add("치킨");member.getFavoriteFoods().add("족발");member.getFavoriteFoods().add("피자");이렇게 넣으시는데HashSet<String> food = new HashSet<>();food.add("치킨");food.add("족발");food.add("피자");member.setFavoriteFoods(food);이렇게 넣어도 똑같이 들어가는데 뭘로 써도 상관없는건가요 ?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
h2 콘솔로 로그인이 되지 않아요.,..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.윈도우를 쓰고 있고 h2 설치를 했는데 콘솔 로그인이 되지 않습니다.강의 아래에 있는 이미지 설명대로 JDBC URL을 수정해서 진행을 해도 전혀 달라지지가 않습니다.어떻게 해야하나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 전이 질문입니다..
안녕하세요. 강의 잘 듣고 있습니다.저는 책과 같이 병행하며 학습을 진행 중입니다.. 책 313 page에 보면.. 영속성 전이 관련 설명 중..Parent parent = em.find(Parent.class, parentId);parent.addChild(child1); 코드의 의미가 궁금합니다..제가 이해하기론 영속성 전이는 특정 엔티티가 영속 상태로 변할 때,연관된 엔티티도 영속 상태로 만들게 해주는 기능으로.. 책의 코드와 내용만 봤을 땐, parent를 find해서 이미 영속 상태로 만들어 두고..child1과 parent를 addChild 편의 메서드를 통해 연관관계를 설정해주면flush 단계에서 변경감지와 영속성전이..? 를 통해 child가 db에 적재 될 것으로 생각하게 되었습니다.. 하지만.. 제가 예상하기로는-> parent Entity 입장에서는 양방향 연관관계도 설정했고 cascade를 걸어놨지만, 영속상태로 전환되는 상황이 아니라서 child1이 db에 적재되지 않을 것으로 예상했습니다.-> child1 Entity 입장에서는 연관관계 주인이며 양방향 연관관계 설정이 되었지만.. 비영속 상태라 변경 감지가 이루어지지 않아서 db에 업데이트 되지 않을 것으로 예상했습니다. (책에선 child1을 저장하기 위함이라 설명)그래서 제가 예상한 개념과 차이가 생겨서 실습도 해봤지만.. db에 적재가 되지 않는 것으로 확인 했습니다.. 아래는 스스로 진행한 실습 코드입니다. (cascadeType.ALL)Parent parent = new Parent(); parent.setName("p1"); Child child1 = new Child(); child1.setName("c1"); System.out.println("==========1==========="); entityManager.persist(parent); System.out.println("==========2==========="); entityManager.flush(); entityManager.clear();; System.out.println("==========3==========="); entityManager.find(Parent.class, parent.getId()); System.out.println("==========4==========="); parent.addChild(child1); //entityManager.merge(parent); System.out.println("==========5==========="); tx.commit(); 다음은 질문 정리입니다.제가 예상한 점들이 맞는지 궁금합니다.책 속 코드의 의도와 의미가 궁금합니다.혹시, em.merge(parent); 가 생략된 것이 의미와 의도에 맞는 건지 궁금합니다.merge를 하면 child1이 db에 적재가 되는데.. 엔티티의 생명주기에서 parent는 managed 상태에서 merge를 하는 지금과 같은 상황은 어떤 의미 인지도 궁금합니다..제가 무엇을 잘못 생각하고 있을까요.. ㅠ 항상 감사합니다. ^^7
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
데이터를 주기적으로 업데이트 해야할 경우 연관관계 질문입니다.
주소 데이터 같은 경우에는 기존 데이터를 유지한 상태가 아니라기존 데이터 삭제 -> 최신 데이터 삽입해당하는 형태로 진행 되어야 하는 경우가 많습니다.시로 승격하거나 읍면리 같은 단위들에서 동으로 승격하는 경우가 많고여러가지 행정상의 이유로 개편이 많이 되기 때문입니다.혹은 건축물 같은 경우 재건축이나 재개발로 인하여 잦은 데이터의 변동이 있기 때문에1달에 한번씩은 전체 데이터를 삭제하고 새로 업로드를 해야하는 경우도 많습니다.이런 특성을 가진 주소 테이블에 연관관계가 많은 경우 어떻게 DB를 관리해야 효율적일지 고민이 많습니다.외부에서 데이터를 받아와서 갱신해야할 케이스가 많은 경우(삭제 후 삽입)에는 연관관계를 쓰지 않는 것이 좋을지아니면 연관관계가 있음에도 효율적으로 데이터를 업데이트할 수 있는 방법이 있는지 궁금합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
sequence방식 allocationSize 관련 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]allocationSize를 50정도로 설정해서 여러서버에서 사용하더라도 동시성 이슈 없이 사용한다고 하셔서 생각해봤는데...sequence를 얻기위해 호출시에 50씩 증가되서 메모리에 가지고 있고 여러 서버에서 자주 호출되는 서비스의 경우 중간에 빈 숫자가 정말 많을 것 같습니다;;1번의 트랜잭션에서 다음시퀀스를 받아오는 쿼리를 여러번 수행하는게(allocationsize를 1로 해두고 여러번 nextval 여러번 수행) 성능상으로 차이가 클까요?실제 배민과 같이 트래픽이 많은 현업에서도 50정도로 잡아서 사용하는지 궁금합니다!(long사이즈도 결국 한계가 있지 않나요?ㅠㅠ)
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
배치사이즈 질문
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 16:29 질문입니다.<property name="hibernate.jdbc.batch_size" value="10"/>이 부분이 햇갈립니다..이걸 하냐 안하냐 차이가(쓰기지연시)위 설정을 하면 DB 커넥션 한번에 10개의 쿼리를 보내준다는거고 위 설정을 안하면 쓰기지연 모드가 발동시 10번의 커넥션이 이루어 진다고 생각하면 되나요 ??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
single table 전략에서 상위 클래스의 필드가 not null이 되는 이유가 궁금합니다.
잘 보니 상위 클래스의 필드는 not null constraint가 적용이 되는데 이 이유가 무엇인지 개인적으로 궁금합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
임베디드 타입과 enum타입의 차이점이 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]안녕하세요 임베디드 타입 영상을 보다가 enum타입과 비슷한것 같은데 궁금한 점이 생겨서 질문드립니다. <참고용 예제로 붙여 둔 코드 입니다.>@Getter @RequiredArgsConstructor public enum PersonalPositionStatus { ST("최전방 공격수"), RW("우측 공격수"), LW("좌측 공격수"), CAM("공격형 미드필더"), CM("중앙 미드필더"), CDM("수비형 미드필더"), RB("우측 수비수"), RCB("우측 센터백"), LCB("좌측 센터백"), LB("좌측 수비수"), GK("골키퍼"); private final String value; @Entity @Getter public class TeamMemberInfo extends BaseTimeEntity { @Id @GeneratedValue @Column(name = "teamMemberInfo_id") private Long id; @Enumerated(EnumType.STRING) private PersonalPositionStatus preferPosition;위코드는 아래 조건들을 기준으로 만들었습니다회원이 어떤 포지션을 선호하는지 조사합니다.PersonalPositionStatus에서 최소1개에서 최대 3개까지 선택가능추후 선택된 값은 DB에 저장 강의를 보면서 @Enumerated(EnumType.STRINNG) private PersonalPositionStatus preferPostion@Embedded private PersonalPositionStatus preferPostion이렇게 둘 다 사용 가능할 것 같아서... 임베디드 타입과 enum타입의 차이점과 어떤 상황에서 사용해야하는지 궁금해져습니다enum은 미리 정의해둔 값을 선택해서 사용하기 위함이고임베디드 타입은 단일 엔티티로 나타내기 위함으로 이해하면될까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Hello JPA 실습 중 발생한 에러에 대하여 질문있습니다!!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요, 아래의 코드에서 첫 번째 트랜잭션과 두 번째 트랜잭션은 정상 작동하지만세 번째 트랜잭션에서 에러가 발생하였습니다. 정확하게는 createQuery()를 호출할 때, 에러가 발생하였습니다. 발생한 에러는 다음과 같습니다.org.hibernate.hql.internal.ast.ErrorTracker reportError ERROR: line 1:8: unexpected token: memberSELECT member FROM Member AS member라고 적은 것이 문제일까 싶어서 member를 m으로 수정하면 다음의 에러로 바뀌었습니다. org.hibernate.hql.internal.ast.ErrorTracker reportError ERROR: line 1:8: unexpected token: Member구글링의 결과 unexpected token 에러가 발생하는 원인이 명확하지 않아서 결국 에러를 해결하지 못하였습니다.추가적으로 강의에서 진행한 것과 달리 MySQL을 사용하였으며, Dialect는 MySQL57Dialect를 사용하였습니다. 첫 번째 트랜잭션과 두 번째 트랜잭션이 올바르게 작동한 것으로 보아 MySQL의 문제가 아닌 것으로 생각되는 데 정확히 어떤 문제인지 검색을 통해 파악하지 못하여 부득이하게 질문 남깁니다.import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class HelloJpa { public static void main(String[] args) { // Factory는 어플리케이션 로딩 시점에 한 번만 만들면 충분하다. EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("hello"); // 첫 번째 트랜잭션 insertMember(entityManagerFactory); // 두 번째 트랜잭션 updateMember(entityManagerFactory); // 세 번째 트랜잭션 selectMembers(entityManagerFactory); // 어플리케이션 종료 시 자원 해제 entityManagerFactory.close(); } private static void insertMember(EntityManagerFactory entityManagerFactory) { // Factory로부터 만드는 EntityManager는 각 트랜잭션에 대하여 하나씩 만들어야 한다. EntityManager entityManager = entityManagerFactory.createEntityManager(); // 트랜잭션 단위로 DB 접근 EntityTransaction tx = entityManager.getTransaction(); tx.begin(); try { Member member = new Member(); member.setId(3L); member.setName("HelloA"); entityManager.persist(member); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { // 트랜잭션 완료 후 자원 해제 entityManager.close(); } } private static void updateMember(EntityManagerFactory entityManagerFactory) { EntityManager entityManager = entityManagerFactory.createEntityManager(); EntityTransaction tx = entityManager.getTransaction(); tx.begin(); try { // select로 조회한 객체는 JPA의 관리 대상이 된다. Member finded = entityManager.find(Member.class, 2L); finded.setName("HelloP"); // 트랜잭션을 커밋하는 시점에 // JPA에서는 관리 대상인 객체가 변경된 것을 체크하고, // 변경된 객체에 대하여 update 쿼리를 보낸다. tx.commit(); } catch (Exception e) { tx.rollback(); } finally { entityManager.close(); } } private static void selectMembers(EntityManagerFactory entityManagerFactory) { EntityManager entityManager = entityManagerFactory.createEntityManager(); EntityTransaction tx = entityManager.getTransaction(); tx.begin(); try { // 에러 발생 List<Member> members = entityManager.createQuery("SELECT member FROM Member AS member", Member.class) .getResultList(); members.forEach(member -> System.out.println(member.getName())); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { entityManager.close(); } } }
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
h2 데이터베이스에 저장이 안됩니다...
무엇이 문제일까요..?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@OneToOne에서는 어디에 지연로딩을 걸어야하나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 해당 영상을 보면서 @OneToOne의 경우는 둘 다 지연로딩을 적용해야하는 것인지? 한 곳에만 적용해야하는것인지 잘 모르겠습니다. @ManyToOne @OneToOne 의 경우는 기본이 즉시로딩이라지연로딩으로 발라야한다는 것에서 @ManyToOne의 반대가 @OneToMany니까 @ManyToOne에 지연로딩을 적용해야하는건 알겠습니다. 근데 @OneToOne의 경우 반대도 똑같기 때문에@OneToOne있는 곳 둘 다 지연로딩을 걸어야하는 걸까요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
jpa 동시성 이슈
안녕하세요. 주옥같은 강의 정말 잘 보고 있습니다.https://www.inflearn.com/questions/158967/%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94-entitymanager%EC%97%90-%EB%8C%80%ED%95%B4-%EA%B6%81%EA%B8%88%ED%95%9C-%EC%A0%90%EC%9D%B4-%EC%9E%88%EC%96%B4-%EC%A7%88%EB%AC%B8-%EB%82%A8%EA%B9%81%EB%8B%88%EB%8B%A4이 질문에 답변 해주신 내용을 보면 결국 EntityManager는 동시성 이슈 없이 개발할 수 있다라고 해주셨는데, 한가지 궁금한게 있습니다.만약 A, B 요청이 동시에 들어온 경우 A, B는 동일한 데이터를 가지게 될 것입니다. 이때 A 요청에서 update 후 commit으로 데이터 변경이 발생되고, 이후 B 요청에서 update 후 commit으로 데이터 변경이 발생되면 A 요청의 update는 반영이 안되는 갱신 손실 현상이 발생할 것으로 생각됩니다. 이러한 경우 lock을 이용해서 처리를 한다고 알고 있는데 혹시 이러한 경우에 대해서 3가지의 질문을 좀 드리고 싶습니다.1. 위 예시로 적은 상황은 질문 글의 답변에서 말씀해주신 내용과는 다른 내용이라고 보는게 맞을까요?2. 저의 지식으로는 위 예시의 경우는 lock을 이용해서 갱신 손실을 방지하는 것으로 알고 있는데, lock을 사용하는 방법 말고 다른 방법이 존재하는 걸까요?3. 동시성 이슈 처리에서 thread-safe한 객체(Atomic 등등)와 db lock을 사용하는 방법 외에도 다른 방법이 있을까요?저의 지식으로는 명쾌한 해답이 나오지 않아 질문 드리게 되었습니다. 미리 답변 감사드립니다!!!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Javax Jakarta 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]jpa를 import하면 import javax.persistence.* 이 아니라 import jakarta.persistence.*로 되어 있는데 이거는 상관 없는 건가요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
mySQL 사용 중 DB 자동 삭제가 안 됩니다.
안녕하세요. 저는 mySQL과 연동하여 JPA를 수강하고 있습니다. 테이블 자동 삭제 후 생성 옵션을 사용하여 강의를 듣고 있습니다.<property name="hibernate.hbm2ddl.auto" value="create"/> 근데 테이블을 삭제하려고 할 때 다른 테이블과 참조 제약조건때문에 삭제가 안 됩니다.ㅠㅠ mySQL 직접 들어가서 제약조건 삭제 후 직접 삭제하는 방법말고 자동으로 삭제할 수 있는 방법이 없을까요?Cannot drop table 'member' referenced by a foreign key constraint 'FK8rljbj20nmt1ae3qb3pu8ftym' on table 'member_product'.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
INFO: HHH000206: hibernate.properties not found
안녕하세요오류 관련된 모든 글 찾아봤는데도 해결되지 않아 글 남깁니다ㅠㅠ다음과 같은 오류가 계속 발생합니다.해당 설정파일들은, persistence.xml 파일pom.xml 파일데이터 베이스를 찾을 수 없다고 뜨는 것 같은데 해당 데이터 베이스는 잘 동작하는 것 확인했습니다.삭제했다가 추가로 생성한 건데도 안 돼요도저히 감이 안 잡히네요 ㅠㅠ 도움주시면 감사하겠습니다!하나 걸리는 것은 상관없는 부분일 수 있는데 password를 "sa"로 설정했는데, 오류 부분에는 **** 이렇게 떠서 걸리네요..!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
h2 tcp 연결
h2 버전 : 2.1.214pom.xml 파일 내용<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>jpa-basic</groupId> <artifactId>ex1-hello-jpa</artifactId> <version>1.0.0</version> <dependencies> <!-- JPA 하이버네이트 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.6.14.Final</version> </dependency> <!-- H2 데이터베이스 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>2.1.214</version> </dependency> </dependencies> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> </project>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="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="javax.persistence.jdbc.user" value="sa"/> <property name="javax.persistence.jdbc.password" value=""/> <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <!-- 옵션 --> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.use_sql_comments" value="true"/> <!--<property name="hibernate.hbm2ddl.auto" value="create" />--> </properties> </persistence-unit> </persistence>여러번 h2 삭제 후 다시 설치해서 해봤는데..뭔가 windows 의 %userprofile% 경로가 문제인건지... 전체 경로를 넣고 해봐도 embeded로는 연결 되는데 tcp로는 계속 실패합니다. 그래서 build 시에도 계속 에러나서 진행이 되지 않고 있습니다.test2 만드는 건 다 해봤습니다.;;TCP 연결이 안되는 상황입니다.java.lang.IllegalStateException: Cannot get a connection as the driver manager is not properly initialized at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:220) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:181) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) 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:263) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:107) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:246) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:129) at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:42) at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:62) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.addConnections(DriverManagerConnectionProviderImpl.java:457) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:323) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:297) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections$Builder.build(DriverManagerConnectionProviderImpl.java:501) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:101) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:76) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:107) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:246) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:146) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66) 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:263) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:175) at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) 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.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at hellojpa.JpaMain.main(JpaMain.java:8) 12월 22, 2022 1:54:25 오후 org.hibernate.dialect.Dialect <init> INFO: HHH000400: Using dialect: org.hibernate.dialect.H2Dialect 12월 22, 2022 1:54:25 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions WARN: SQL Error: 90067, SQLState: 90067 12월 22, 2022 1:54:25 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions ERROR: Connection is broken: "java.net.SocketTimeoutException: connect timed out: localhost" [90067-214] Exception in thread "main" 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:275) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:175) at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) 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.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at hellojpa.JpaMain.main(JpaMain.java:8) Caused by: org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:48) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:37) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113) at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:131) at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:42) at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:62) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.addConnections(DriverManagerConnectionProviderImpl.java:457) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:323) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:297) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections$Builder.build(DriverManagerConnectionProviderImpl.java:501) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:101) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:76) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:107) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:246) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:146) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66) 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:263) ... 14 more Caused by: org.h2.jdbc.JdbcSQLNonTransientConnectionException: Connection is broken: "java.net.SocketTimeoutException: connect timed out: localhost" [90067-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:678) at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) at org.h2.message.DbException.get(DbException.java:212) at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:437) at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:325) at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:122) at org.h2.Driver.connect(Driver.java:59) at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:39) ... 29 more Caused by: java.net.SocketTimeoutException: connect timed out at java.base/java.net.PlainSocketImpl.waitForConnect(Native Method) at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:107) at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242) at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224) at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403) at java.base/java.net.Socket.connect(Socket.java:591) at org.h2.util.NetUtils.createSocket(NetUtils.java:135) at org.h2.util.NetUtils.createSocket(NetUtils.java:99) at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:130) at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:433) ... 33 more Process finished with exit code 1
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@Temporal 과 @CreatedDate 차이가 궁금합니다.
안녕하세요 해당 강의에서 날짜에는@Temporal 어노테이션을 사용하셨는데 김영한님과 친하신 배민 개발자 출신 jojoldu님은 @CreatedDate @LastModifiedDate를 사용하여생성일 / 수정일을 나타내더라고요 @Temporal과 @CreatedDate @LastModifiedDate의 차이점이 궁금합니다@Temporal은 Time, Date, TimeStamp 이렇게 3가지 타입으로 나타낼 수 있다 날짜,시간을 나타내고 싶지만 Created, Modify가 아닌 경우에 사용한다. 이렇게 2가지 차이점을 생각해봤는데 이게 맞을까요...?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
즉시로딩 성능 저하 관련
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]먼저 좋은 강의를 제공해주셔서 감사드립니다.강의 [즉시 로딩과 지연 로딩][24:22] 에서즉시 로딩을 쓰면 쿼리가 수십 개 나가고 성능이 안 좋아진다고 하셨는데요. 성능이 안 좋아지는 건 발생한 SQL 로그로 파악하는 걸까요? 성능을 측정할 수 있는 도구가 혹시 있을까요?강의 내용에서 즉시 로딩의 이론적인 개념은 이해해서 실무에서 잘 활용할 수 있을 거 같은데ㅎㅎ이걸 몰랐을 때 성능 저하되는 걸 수치적으로 확인하고 그게 쿼리 쪽 문제인지 찾게 되는 접근 방법도 혹시 있을 까 궁금하여 문의드립니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
벌크 연산 11:09 em.clear()를 하지 않았는데.....
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]Team teamA = new Team(); teamA.setName("teamA"); em.persist(teamA); Team teamB = new Team(); teamB.setName("teamB"); em.persist(teamB); Member member1 = new Member(); member1.setUsername("member1"); member1.setAge(10); member1.changeTeam(teamA); em.persist(member1); Member member2 = new Member(); member2.setUsername("member2"); member2.setAge(20); member2.changeTeam(teamA); em.persist(member2); Member member3 = new Member(); member3.setUsername("member3"); member3.setAge(30); member3.changeTeam(teamB); em.persist(member3); em.flush(); em.clear(); int resultCount = em.createQuery("update Member m set m.age = 100") .executeUpdate(); Member findMember = em.find(Member.class, member1.getId()); System.out.println("findMember.getAge() = " + findMember.getAge());em.clear()를 하지 않으면 10이 나와야 할거 같은데 100이 변경된게 영속성 컨텍스트에 반영이 된거 처럼 나오는데.스펙이 바뀐걸까요? 아니면 제가 뭘 잘 못한걸까요?https://drive.google.com/file/d/1qzmIqCOXOeCdy5McL0_RzcbugxbmdyMV/view?usp=share_link
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
저만 이상하게 되나요? 21:36 join fetch 해도 2번만 나오는 이유가....
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team_id") private Team team;Team teamA = new Team(); teamA.setName("teamA"); em.persist(teamA); Team teamB = new Team(); teamB.setName("teamB"); em.persist(teamB); Member member1 = new Member(); member1.setUsername("member1"); member1.setAge(10); member1.changeTeam(teamA); em.persist(member1); Member member2 = new Member(); member2.setUsername("member2"); member2.setAge(20); member2.changeTeam(teamA); em.persist(member2); Member member3 = new Member(); member3.setUsername("member3"); member3.setAge(30); member3.changeTeam(teamB); em.persist(member3); em.flush(); em.clear(); String query = "select t from Team t join fetch t.members"; List<Team> result = em.createQuery(query, Team.class) .getResultList(); System.out.println("result.size() = " + result.size());패치 조인을 해도 왜 2번만 나올까요?혹시나 해서 파일도 올려봅니다.https://drive.google.com/file/d/1nOHKHJdVRezwrNpd_1G_3-EyeD8Neymg/view?usp=share_link