자바 ORM 표준 JPA 프로그래밍 - 기본편
자바 ORM 표준 JPA 프로그래밍 - 기본편
수강정보
(157개의 수강평)
1931명의 수강생
스킬태그 #Java, #JPA, #Spring Data JPA
5개월 할부시
월 24,200원121,000원
지식공유자 : 김영한
54회 수업 · 총 16시간 1분 수업
기간 : 평생 무제한 시청
수료증 : 발급 강의
수강 난이도 : 초급
Kihun Kim 프로필

연관관계 메소드 Kihun Kim 39분 전
4분 30초 경에 parent 하고 child하고 연관관계 메소드 설정하신 부분에서 질문있는데요  여기서 this하신 부분이 child.getParent()하고 같은거 맞나요. 이게좀 헷갈리네요 감사합니다. 

0
킴앀 프로필

JPQL 예제 관련해서 문의드릴게 있습니다! 킴앀 8시간 전
JPQL 예제 관련해서 문의드릴게 있습니다! 예제 코드에서  persist하고 중간에 JPQL로 조회 쿼리를 수행하면 이전 SQL이 flush가 되서 결과값이 나온다고 하셨는데,  실제로 DB에 COMMIT이 된 상태가 아니고, 단순히 INSERT 쿼리만 날린 상태인데 SELECT가 되는건가요?

2
Juhyeon Lee 프로필

연관관계 매핑에서 @JoinColumn이 없어도 되나요? Juhyeon Lee 1일 전
안녕하세요, 강의 정말 잘 듣고 있습니다. 여태까지 들어본 강의중에 김영한님 강의들이 가장 도움이 많이 되는것 같습니다. 단방향 연관관계 동영상을 보고 난 후, Team 클래스에서 @Column("TEAM_ID")를 지우고 실행도 해보고, 테이블이름을 TEAM 말고 TEAMS로 설정도 해보고, Member 클래스에서는 @JoinColumn을 아예 지우고 해봤는데도 매번 잘 실행되더라구요. 어떻게 저런 어노테이션들이 없어도 모두 제대로 실행되는지 헷갈리네요.. JPA를 배우는게 처음이라 잘 이해도 안가고 인터넷도 찾아봤지만 답이 안나와서 질문 드립니다. 공부할때 가끔가다 한번씩 별거 아닌데도 갑자기 헷갈리기 시작할때가 있더라구요.. 감사합니다.

5
윽이럴뚜가 프로필

값 타입 컬렉션 윽이럴뚜가 2일 전
값 타입 컬렉션..이것을 @ElementCollection으로 사용하지 않고 그냥 Entity만들어서 사용해도 되지 않나요? JPA를 필요로 하는 곳에 프로젝트를 가게 됐는데 갑작스럽게 너무나 방대한 학습으로 인해 뇌의 전두엽이 터질것 같은데 그냥 엔티티로 다 때려박고 양방향 만들어도 되나요? 어차피 컬렉션을 엔티티로 만들면 @OneToMany써서 조인하면 될거같은데.

4
kys4548 프로필

객체간의 연관관계 질문드립니다. kys4548 2일 전
선생님의 강의를 다 듣고 도메인의 개념이 궁금하여  DDD Start 라는 책을 보고있습니다. 해당 책에서는 애그리거트간의 참조시 객체간 직접참조가 아닌 id를 이용한 간접참조를 하는것이 좋다고 되어있습니다. - 트랜잭션 범위 내에서 한 애그리거트가 관리하는 범위는 자기 자신으로 한정해야 한다. -  여러 DB(Mysql, MongoDB) 사용의 확장성을 고려해야 한다. - 애그리거트의 경계를 명확히 하고 물리적 의존을 제거하므로 응집도를 높인다. 선생님 강의를 들으면서 객체간의 직접참조만 사용해 보았었는데 실무에서는 모두 직접참조로 이어지는것인지 궁금합니다.

3
moonseok.shin 프로필

Exception 오류 확인 요청 moonseok.shin 2일 전
선생님께서 하신 것과 똑같이 하였는데, 아래와 같이 오류가 나는데 어디를 손봐야 할까요?  main 에서 아래 한줄만 딱 추가했습니다.  Persistence.createEntityManagerFactory("hello"); Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException at org.hibernate.boot.spi.XmlMappingBinderAccess.<init>(XmlMappingBinderAccess.java:43) at org.hibernate.boot.MetadataSources.<init>(MetadataSources.java:86) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:212) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:174) at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:76) at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:171) at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:119) at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:61) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:50) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at hellojpa.JpaMain.main(JpaMain.java:10)

3
탁형 프로필

Member와 Order간의 양방향 관련 질문입니다 탁형 2일 전
강의 후반부에 실무에선 Member와 Order가 양방향이 되는건 잘못된 설계이고 단방향으로 끊어내는게 맞다고 하셨는데, '내 주문내역' 이런 경우는 Member를 통해서 Order를 보는게 아닌가요? 어떻게 풀 수 있는건가요?

2
윽이럴뚜가 프로필

em.close() 윽이럴뚜가 2일 전
현재는 em.close를 하고 name은 지금 select가 되어 가져올수가 있네요. clear를 하면 catch문으로 가는것이 맞네요.. 뭔가 JPA 업데이트가 된걸까요..흠.... Member m1= em.getReference(Member.class,member1.getId()); System.out.println("m1.getClass() = " + m1.getClass()); em.close(); System.out.println("m1.getUserName() = " + m1.getUserName()); System.out.println(" =============== "); tx.commit(); //이시점에 DB 쿼리가 날라감 } catch (Exception e) { tx.rollback(); e.printStackTrace(); } finally { em.close(); } emf.close();}

2
윽이럴뚜가 프로필

재밌네요. JPA 란거 윽이럴뚜가 3일 전
Member m1= em.getReference(Member.class,member1.getId());System.out.println("m1.getClass() = " + m1.getClass());Member m2= em.find(Member.class,member1.getId());System.out.println("m2.getClass() = " + m2.getClass());System.out.println("m1==m2"+(m1.getClass() == m2.getClass()));System.out.println(" =============== "); 1. 제가 예상한것은 영속성 컨텍스트에 프록시 객체가 담길것이고, 2. find 해서 가져오려 했으나 영속성 컨텍스트에 Member객체가 있기에 db로 안가고     프록시 객체를 그냥 가져와서 true가 나온다... 가 예상이었슴다. 근데 결과는 2번이 약간 달랐죠 일단 db로 쿼리는 select 때린다. 근데 가져온것은 프록시 객체.  ㅡㅡ.... 아니 DB왜 간거지... DB까지 간것이 맞고 그 내용까지 JPA 자기 눈으로 직접 보았으나 일단 영속성 컨텍스트에 이미 있으니 DB에서 가지고 온것을 '버리자!!!' 하고 그냥 앞의 프록시 객체를 사용을 하는건가요? 제가 이해한게 맞나여? 강사님

1
윽이럴뚜가 프로필

team에서 member를 add할 이유가 이해가안갑니다. 윽이럴뚜가 4일 전
어차피 조회만 가능하고, add 해봤자 무반응일텐데 왜 주인이 아닌쪽에서 regist가 아닌 add 작업을 꼭 해서 양방향성을 유지하는지....ㅠㅠ 

2
Kata Coder 프로필

JPA에 의해 생성된 Query의 갯수를 반환하는 방법은 없을까요? Kata Coder 5일 전
안녕하세요, 강의를 들으며 테스트 코드를 작성중에 있습니다. JPA로 인해 예상치도 못하게 쿼리가 많이 생성될 수 있다는 사실을 예제를 통해 보면서, 디버깅 전략을 어떻게 해야할지 고민이 들었는데요,  혹시 JPA에서는 해당 Transaction 혹은 해당 Entity Manager에서 실제로 몇번 Database로 쿼리를 날렸는지 세어주는 메소드가 있을까요?

2
윽이럴뚜가 프로필

강의 내용과 결과가 다르게 나와 궁금한게 생겼어요. 윽이럴뚜가 6일 전
강사님이 db에 저장이 된 상태가 아니라 조회도 안될것이다 라고 5분에 말씀하셨는데요. 일단 commit은 안된 상태지만 조회가 됩니다. 안되야 하는데 이상하네요.. persist를 하면 JPA가 관리할거다. 영속한다. 라는것일 뿐이고 쓰기 지연 sql 저장소에만 저장이 된 상태겠지요. 즉, commit을 해야 databse에 직접적으로 쿼리가 날라가고 저장이 될텐데. 흠... Member memberA = new Member(970L, "1"); Member memberB = new Member(980L, "2"); Member memberC = new Member(990L, "3"); em.persist(memberA); em.persist(memberB); em.persist(memberC); TypedQuery<Member> query = em.createQuery("select mem from Member mem", Member.class); List<Member> members = query.getResultList(); for (Member m : members) { System.out.println("m.getId() = " + m.getId()); System.out.println("m.getName() = " + m.getName()); } System.out.println(" =============== ");// tx.commit(); //이시점에 DB 쿼리가 날라감

1
권정현 프로필

앤티티에서 두개의 같은 앤티티를 매핑하는 법에 대해 질문드립니다. 권정현 11일 전
안녕하세요 선생님  선생님의 강의 덕분에 JPA 대해 많은것을 알게 되었습니다. 다름이 아니오라 JPA를 활용한 가벼운 프로젝트를 만들다 이럴때는 어떤 방식으로 하시는지 궁금해 질문드리게 되었습니다. 예를 들어 A팀과 B팀이라는 축구 팀이 있습니다. (Team 이라는 앤티티) 이 두팀의 서로 경기일정, 장소,경기 득점을 담는 경기일정 테이블이 있습니다. (Match 라는 앤티티) 여기서 Match라는 앤티티에 두팀을 매핑 시키는 방법에 대해 질문드리게 되었습니다. -------------------------------------------------------------------------------------------------------------- 첫번째 방법은 Match테이블에 두 앤티티를 받는 방법인데 생각한 방식은 홈팀과 어웨이 팀으로 해서 만드는 방식을 생각했습니다 그런데  org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: com.springjpa.sample.soccorshop.domain.team.match.Match column: team_pkid (should be mapped with insert="false" update="false") 이 오류의 설명 처럼 insert="false" update="false"로 하는 것이 맞는지 모르겠습니다. 두개의 동일한 앤티티를 한 앤티티에 넣는 경험이 없어 맞는지 의심이 들어... --------------------------------------------------------------------------------------------------------------------- 두번째 생각한 방법은 한 Match 테이블에서 한쪽은 Team으로 다른쪽은 팀의 주장인 Member앤티티로 조회하는 방법 강의를 통해서 또는 다른 기능들을 구현하면서(예를 들어 한 회원이 팀에 들어가고 싶어 축구 팀에 가입 신청을 하면  팀에서 가입 요청 목록을 조회하여 그회원을 가입허가) Member(회원 ){1} ------- {N}JoinRequest(가입요청){M}----------{1}Team(팀) 다른 엔티티를 탐색하는 것에 익숙하다 보니 이방식으로 구현할수도 있다고 생각합니다. 경기가 끝나고 득점같은 것을 Match테이블에 기록하고 나중에 경기 결과 리스트를 만들때는  'homeTeam의 id와 소속한 팀의 id가 같거나 awayCaption의 id와 소속한 팀의 주장의 id와 같은 Match테이블'을 jpql로 해서 받을수 있지 않을까 생각합니다. ---------------------------------------------------------------------------------------------------------------- 세번째는 그냥 Member, Team 매핑 하지말고 그냥 String으로 두개의 팀이름으로 작성하자는 방법입니다. 이렇게 테이블을 작성하고 나중에 조회할때는 homeTeamName, awayTeamName 둘중 하나와 소속한 팀의 이름이 같은 Match테이블 리스트를 반환하는 방법입니다. 이 방법으로는 쉽게 구현할 수 있다고 생각하지만 디테일한 예전 기록을 볼려면 getter을 활용한 List를 반환 받을수 없다고는 생각합니다 세가지 방법을 생각해봤는데 2번째 방법은 다른 앤티티 탐색의 경험으로 저렇게 하면 되지 않을까 라는 생각이지만 굳이 저렇게 할 필요가 있나? 라는 생각도 있어 잘 모르겠습니다... 현업에서는 매칭 같은 것은 어떤 방식으로 구현하시는지 궁금해 여쭙게 되었고 혹시나 제가 생각한것과 다른 방식이 있는지  조언을 여쭙고자 글을 남기게 되었습니다.  혹시 설계의 기본도 없다고 말씀해 주셔도 감사히 새겨 듣겠습니다. 마지막으로 활용1,2 데이터 JPA, querydsl도 한번으로 끝내지 않고 여러번 정독하면서 제것으로 만들려고 하고 있습니다. 좋은 강의, 기술들을 쉽게 잘 설명해 주셔서 항상 감사드립니다.

2
dlawnstn12345 프로필

persistence.xml 질문드립니다. dlawnstn12345 11일 전
메이븐에 pom.xml 같은 경우는 mavenrepository 사이트에서 각종 최신 라이브러리를 가지고 올 수 있는데 persistence.xml에 있는 방언이나 db에 종류에 따라서 달라지는 property 속성들의 정보와 최신 라이브러리는 어느 사이트에서 어떻게 볼 수 있고 어떻게 가져오나요? 밑의 이런 정보들이요. <?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> 

1
HW J 프로필

챕터6의 다양한 연관관계 매핑 - ManyToMany 전환작업시 질문드립니다. HW J 14일 전
우선 돈주고 못사는 경험이 담긴 이론강의를 잘 보고 있음에 감사드립니다.  ManyToMany 강의(책 6.4.4)에서 ManyToMany는 사용하지 않고, 연관관계 엔티티 기반(조인테이블 기반)으로 ManyToOne, OneToMany로 푸는 과정에서 2가지 정도 추가질문 드리고자 합니다. [ 질문 1] 실무 개발환경에서는 FK 보유한 엔티티 (강좌/책 예시에서 Order에 해당)의 테이블을  jpa persistence.xml 설정으로 create하기보다는 별도 DDL 로 테이블 먼저 생성하고, @Table 매핑으로 잡는게 실무에서 권장되는 방법인지 궁금합니다. ( 실무에서 persistence.xml에서 create 설정으로 테스트 하기 어려운 개발환경이라-기존 다른 개발디비 테이블내 테스트데이터 존재하여- 일단 FK값을 지닌 테이블 스키마를 생성하고, 연관관계 엔티티에 @Table로 매핑시키려고 합니다.)  ------------------------  2번 질문에 앞서 A테이블과 B테이블이 N:M 관계여서 C라는 FK 보유한 테이블을 생성하고, 이에 대한 엔티티 C를 정의했다고 가정을 하겠습니다. (C 테이블은 강의에서 권장하신대로 비즈니스로직과 무관한 auto_increment ID값을 사용합니다.) 또한 테이블은 DDL로 먼저 생성 하고, 이때 별도 FK는 정의하지 않으려고 합니다. (아무래도 테이블에서 FK는 개념상 설정을 하지만 스키마에서 강제로 지정하지는 않는 경우가 FK 제약조건 명시보다 데이터 관리에 따른 이슈가 덜하여) [질문2 ] 위의 N:M (다대다) 관계의 엔티티 적용하여 테스트 메소드 (본믄의 JpaMain 으로 우선 h2 기반으로 테스트 합니다.) 수행시 C테이블의 엔티티에 정의된 @ManyToOne, @JoinColum(name, referencedColumnName) 설정으로 하이버네이트 콘솔결과에 FK2m6joadf 이런식으로 FK가 임의 설정된 것이 확인되는데요, 이 조인컬럼 조건들이 실제 DDL로 적용한 FK 없는 테이블의 스키마 제약조건에 영향을 미치게 될지 궁금합니다.

2
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스