월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값 컬렉션 HashSet 타입인 favoriteFoods를 수정할 때 궁금한 것이 있습니다.
<Member 클래스>@ElementCollection @CollectionTable(name = "FAVORITE_FOOD", joinColumns = @JoinColumn(name = "MEMBER_ID") ) @Column(name = "FOOD_NAME") // 값이 하나라 가능 private Set<String> favoriteFoods = new HashSet<>();<JpaMain 함수>try { Member member = new Member(); member.setUsername("member1"); member.setHomeAddress(new Address("homeCity", "street", "10000")); member.getFavoriteFoods().add("치킨"); member.getFavoriteFoods().add("족발"); member.getFavoriteFoods().add("피자"); member.getAddressHistory().add(new Address("old1", "street", "10000")); member.getAddressHistory().add(new Address("old2", "street", "10000")); em.persist(member); em.flush(); em.clear(); System.out.println("=========== START ==========="); //todo: 값 타입 수정 Member findMember = em.find(Member.class, member.getId()); Address a = findMember.getHomeAddress(); findMember.setHomeAddress(new Address("newCity", a.getStreet(), a.getZipcode())); // HashSet이라서 set 메서드 활용 불가 findMember.getFavoriteFoods().remove("치킨"); findMember.getFavoriteFoods().add("한식"); tx.commit();위의 메인함수를 여러 번 실행했는데 HashSet임에도 불구하고 순서가 지켜진 체로 DB에 저장된 결과가 다음과 같습니다.그러나, em.flush()와 em.clear()를 주석처리하고 다시 실행해보면 DB로 조회할 때 순서가 지켜지지 않고 무작위로 저장이 됩니다. 제 예상은 em.flush()가 add()로 저장된 컬렉션 값을 먼저 DB에 반영하니까 순서가 보장되서 항상 같은 결과가 나오지 않나 생각됩니다. 이것이 맞나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
생각한대로 실행이 되지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.제 프로젝트 압축파일입니다.https://drive.google.com/file/d/1CsFmsNczcupxGIQTMM_-uA7EQFzu3KRq/view?usp=sharing JpaMain에서Movie movie = new Movie(); movie.setDirector("aaa"); movie.setActor("asdf"); movie.setName("바람과 함께 사라지다"); movie.setPrice(10000); em.persist(movie); em.flush(); em.clear();에 의해 movie가 insert되어야하는데 실제로 데이터베이스의 MOVIE테이블을 조회해보면 아무것도 없습니다. 그리고 아래와 같은 에러로그가 뜨는데 어떻게 해야할지 모르겠어서 질문드립니다!https://drive.google.com/file/d/1YCpr2ZBFSC84lw3wvn5wks22DVx1GHAM/view?usp=sharing
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
insert문이 안날라갑니다!!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 위에는 로그부분이고아래는 JpaMain 코드입니다!엔티티는 만들어지나 insert문이 안날라갑니다
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
team과 findmember.getTeam()
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 제가 실습해보다가 궁금한 부분이 생겨서 질문드립니다. public class JpaMain { public static void main(String[] args){ EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // persistence.xml에 있는 <persistence-unit name="hello">애서 name이 hello니깐 createEntityManagerFactory("hello")에 hello 넣어줘야함 EntityManager em = emf.createEntityManager(); // 밑의 close() 이전에 할 거 다하고 close()로 entitymanager랑 entityManagerFactory 닫음 EntityTransaction tx = em.getTransaction(); try{ tx.begin(); Team team = new Team(); team.setName("teamA"); em.persist(team); Member member = new Member(); member.setUsername("member1"); member.setTeam(team); em.persist(member); Member member2 = new Member(); member2.setUsername("member2"); em.persist(member2); // em.flush(); em.clear(); Member findmemeber = em.find(Member.class,member.getId()); List<Member> findmembers = findmemeber.getTeam().getMembers(); System.out.println(team); System.out.println(findmemeber.getTeam()); tx.commit(); } // transection을 열고 코드를 수행하고 transaction을 닫음 catch (Exception e){ System.out.println(e); tx.rollback(); } // 에러나면 transaction 롤백 finally{ em.close(); } // tx.begin() ~ tx.commmit()은 transaction단위, JPA는 데이터베이스에 대한 작업시 트랜잭션 작업단위로 해야한다. emf.close(); } } 이렇게 코드를 쳐봤는데System.out.println(team)과System.out.println(findmember.getTeam())이 jpabook.jpashop.domain.Team@2b34e38cjpabook.jpashop.domain.Team@5633ed82으로 다른 인스턴스가 출력이 되는 걸 확인했습니다.제 생각에는 member.setTeam(team)을 했기 때문에 같은 인스턴스가 나올 것이라고 생각했는데 왜 다른 인스턴스가 나오게 되는 것인지 궁금합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 실전예제1 따라하다 오류가 생겨 문의 드립니다 Dec 28, 2023 11:18:34 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformationINFO: HHH000204: Processing PersistenceUnitInfo [ name: hello ...]Dec 28, 2023 11:18:34 PM org.hibernate.Version logVersionINFO: HHH000412: Hibernate Core {5.3.10.Final}Dec 28, 2023 11:18:34 PM org.hibernate.cfg.Environment <clinit>INFO: HHH000206: hibernate.properties not foundDec 28, 2023 11:18:34 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>INFO: HCANN000001: Hibernate Commons Annotations {5.0.4.Final}Dec 28, 2023 11:18:34 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configureWARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)Dec 28, 2023 11:18:34 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001005: using driver [org.h2.Driver] at URL [jdbc:h2:tcp://localhost/~/jpashop]Dec 28, 2023 11:18:34 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001001: Connection properties: {user=sa}Dec 28, 2023 11:18:34 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001003: Autocommit mode: falseDec 28, 2023 11:18:34 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>INFO: HHH000115: Hibernate connection pool size: 20 (min=1)Dec 28, 2023 11:18:34 PM org.hibernate.dialect.Dialect <init>INFO: HHH000400: Using dialect: org.hibernate.dialect.H2DialectDec 28, 2023 11:18:35 PM org.hibernate.resource.beans.spi.ManagedBeanRegistryInitiator resoveBeanContainerINFO: HHH10005002: No explicit CDI BeanManager reference was passed to Hibernate, but CDI is available on the Hibernate ClassLoader.Dec 28, 2023 11:18:35 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stopINFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/jpashop] 커뮤니티에 있는 오류들 참고해서 봤는데 잘 모르겠습니다
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
insert문
jpa에서 코드도 제대로 치고 <property name="hibernate.hbm2ddl.auto" value="create" />create로 설정하고 했는데 왜 저장할때 insert문이 안날라 가는걸까요?테이블은 제대로 생성이되는데 데이터가 저장이 안되고 insert문도 날라가지 않습니다!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값타입 쓰는 이유, 값타입의 한계와 해결방법
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]값 타입을 공부하며 정리한 생각입니다.제가 올바르게 생각했는지 검토해주시면 감사드리겠습니다개인적으로 정리한 글이라 존댓말이 아닌 점 양해주시면 감사드리겠습니다 값타입은 왜 쓰는가?엔티티는 서로 공유하는 것이 목표이다그래서 엔티티 필드를 다른 엔티티 필드와 연관관계 매핑(@ManyToOne 등)을 하는 것이다하지만 모든 엔티티 필드를 서로 공유한다고 하면 너무 복잡하지 않겠는가?필드가 해당 엔티티에만 소속되어 다른 엔티티와는 연관(공유)되지 않는 값이 있으면 조금이라도 단순해질 수 있지 않을까?그래서 값 타입을 사용하는 것이다!값 타입의 한계는 무엇인가?Wrapper type(기본 값 타입), String type(기본 값 타입), 임베디드 타입은 객체 타입이다.그래서 기본값 타입과 임베디드 타입은 참조 공유가 가능하다.객체 타입의 참조 공유가 문제라고 생각하면 문제일 순 있겠지만자바에서 참조 공유를 막을 수 있는 방법은 없다. 그래서 참조 공유의 문제(두 객체가 하나의 참조를 바라볼 수 있는 문제)는 차치하자.그러면 발생할 수 있는 문제는 무엇이냐면하나의 참조를 바라보는 두 객체가 존재할 때, 해당 참조의 실제 값이 바뀌면 두 객체의 값이 모두 변경될 수 있다는 것이다.(참고로, 만약 참조의 실제 값이 바뀔 때 두 객체의 값이 모두 변경되길 의도했다면 값타입이 아니라 엔티티 타입을 써야 한다. 왜냐하면 공유가 목표였다면 값타입이 아니라 엔티티를 사용하는 것이 옳기 때문이다.)물론 Wrapper type(기본값 타입), String type(기본값 타입) 은 setter 가 없기 때문에 값 변경이 불가능하다.그래서 기본값 타입은 참조 공유의 문제로부터 어느정도 자유로울 수 있다.그럼 진짜 문제는 임베디드 타입이다.왜냐하면 임베디드 타입은 만약 개발자가 setter 를 만들면 값 변경이 가능하기 때문이다.어떻게 임베디드의 참조 공유의 문제(두 객체가 하나의 참조를 바라볼 때, 참조의 실제값이 변경되어 두 객체의 값이 동시에 변경될 수 있는 문제)를 해결할 수 있을까?불변 객체를 만드는 것이다불변 객체는 말 그대로 한번 생성한 이후에 값을 변경하지 못하는 객체이다불변 객체를 만들기 위해1. 생성자로만 필드 초기화2. setter 금지를 준수하면 된다만약 값을 변경하고 싶다면 객체를 통째로 새롭게 만들어야 한다
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.getReference() 이후에 em.find()를 해도 둘다 프록시 객체가 나오는 이유가 궁금합니다.
예전에 영속성 컨텍스트 강의를 들을 때는 JPA는 동일성을 보장하기 위해 같은 엔티티 타입과 PK로 조회를 하면 1차 캐시에 그 값이 있으면 반환된 객체도 동일하다고 배웠습니다. 이것과 마찬가지로, em.getReference(Member.class, member1.getId()) 로 DB로부터 조회하지 않고 참조값만을 가져와도 1차 캐시에 그 값이 올라오는건가요? 그래서 이후에 em.find(Member.class, member1.getId())를 해도 프록시 객체가 반환된 이유가 1차 캐시에 있는 참조값을 그대로 조회해서 그런가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
N:M 을 1:N N:1 로 풀면 이런 모습일까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? 네[질문 내용]안녕하세요. 항상 영한님의 강의를 수강하며 재밌게 공부하고 있습니다.질문이 있습니다.Item & Category 를다대다가 아니라일대다 다대일로 연관관계 매핑을 할 때중간테이블을 직접 만든다면 다음과 같이 만들면 되는걸까요? @Entity public class Item { @Id @GeneratedValue @Column(name = "ITEM_ID") private Long id; private String name; private int price; private int stockQuantity; @OneToMany @JoinColumn(name = "ITEM_ID") private List<CategoryItem> categoryItems = new ArrayList<>(); }@Entity public class CategoryItem { @Id @GeneratedValue @Column(name = "CATEGORY_ITEM_ID") private Long id; @ManyToOne @JoinColumn(name = "CATEGORY_ID") private Category category; @ManyToOne @JoinColumn(name = "ITEM_ID") private Item item; }@Entity public class Category { @Id @GeneratedValue @Column(name = "CATEGORY_ID") private Long id; private String name; @OneToMany @JoinColumn(name = "CATEGORY_ID") private List<CategoryItem> categoryItems = new ArrayList<>(); @ManyToOne @JoinColumn(name = "PARENT_ID") private Category parent; @OneToMany(mappedBy = "parent") private List<Category> child = new ArrayList<>(); }
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
ManyToOne 설정 질문있습니다.
public class ReservationGoods extends BaseEntity { @ManyToOne @JoinColumn(name = "reservation_id") private Reservation reservation;}public class Reservation extends BaseEntity { @OneToMany(fetch = FetchType.LAZY,mappedBy = "reservation") private List<ReservationGoods> reservationGoods = new ArrayList<>(); }네이버 헤어 예약처럼 시간상품이 하나의 주문에만 들어갈 수 있고 주문 하나의 여러개의 상품을 신청할 수 있어서 지금 db설계가 상품: 주문이 다대일 상황입니다이게 상품이 생성될때는 주문관해서는 모르는상황이라이거는 어쩔 수 없이 주문1 : 상품다 로 단방향 연결밖에 답이 없을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계와 연관관계의 주인 2 - 주의점, 정리 질문
1. 11분 57초에 team. getMember().add(member); 구문이 있는데요. add()가 insert역할인가요?팀의 멤버를 조회해서 멤버를 추가하라는게 혹시 무슨 뜻인가요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
@OnetoOne관계에서 실전 예제에서는 왜 외래 키 부분에 unique = true를 넣지 않았는지 궁금합니다.
우선 일대일 관계로 매핑된 Order와 Delivery 엔티티 코드는 다음과 같습니다.<Order 클래스> @OneToOne @JoinColumn(name = "DELIVERY_ID") private Delivery delivery;<Delivery 클래스> @OneToOne(mappedBy = "delivery") private Order order;일대일 관계를 명시하려면 외래키에 unique 제약조건을 추가해야 된다고 알고 있는데요. 이상한 점은 유니크 제약조건을 추가하지 않아도 아래와 같이 하이버네이트가 알아서 제약조건을 추가해줬다는 것입니다.왜 이런 현상이 발생한거죠?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
:단방향 연관관계 질문있습니다.
강의 :단방향 연관관계20분 55초에서 쿼리가 안나온다는게 create table Team ( TEAM_ID bigint not null, TEAM_NAME varchar(255), primary key (TEAM_ID) )이게 안나오느다는건가요?근데 persist로 db에 저장되서 안나온다고 하셨는데 12분에도 persist가 있는데도 쿼리가 나오는데요. 혹시 find 앞에 persist는 예외인건가요?try { Team team =new Team(); team.setName("TeamA"); em.persist(team);//영속 상태가 되면 pk값이 세팅 되고 영속 상태가 됨. Member member = new Member(); member.setUsername("member1");// member.setTeamId(team.getId());//연관관계 매핑 배우기 전 팀의 외래키를 만들어서 멤버에 조인함. em.persist(member); tx.commit(); }catch (Exception e){ tx.rollback(); }finally { em.close();//엔티티 매니저가 내부적으로 데이터베이스를 물고 동작을 함. } emf.close(); }단방향 연관관계 22분에서 em.flush(); em.clear();을 추가하면 영속성 컨테스트를 db로 보내버리고 동기화 상태에서 1차캐시가 빈상태로 조회가능하다는것은 알겠는데요.그래서 다른점이 혹시 아래 select문인가요?Hibernate: select member0_.MEMBER_ID as MEMBER_I1_0_0_, member0_.TEAM_ID as TEAM_ID3_0_0_, member0_.USERNAME as USERNAME2_0_0_, team1_.TEAM_ID as TEAM_ID1_1_1_, team1_.TEAM_NAME as TEAM_NAM2_1_1_ from Member member0_ left outer join Team team1_ on member0_.TEAM_ID=team1_.TEAM_ID where member0_.MEMBER_ID=?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
실전 예제 1 - 요구사항 분석과 기본 매핑 질문있습니다.
1.7분에서 setter 보다 유지보수 때문에 생성자를 쓰는데 이유 좀 자세하게 알수 있나요?2.9분 53초에서 뒤에 사용될 명령어 나오게 하는 단축키 뭔가요?3.10분 45초에 @Table(name="Orders")//Orders로 한 이유가 에약어로 order은 orderby로 인식된다.(db마다 다름) 가 맞나요?4.14분 10초처럼 아래 문구를 어떻게public void setStockQuantity(int stockQuantity) {this.stockQuantity = stockQuantity;}public void setStockQuantity(int stockQuantity) {this.stockQuantity = stockQuantity;} 이렇게 바꾸나요? 5. 왼쪽화면은 제화면이고 오른쪽 화면은 강의 화면입니다. 빨간색 네모박스처럼 상위 폴더 하위 폴더가 안나뉘어집니다. 이렇게 어떻게 해야 하나요? 시도한 방법:jpabook.jpashop.domain1 을 domain1 이렇게 리팩터 시도를 하면 활성화가 안됩니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
실전 예제 1 - 요구사항 분석과 기본 매핑 강의 세팅 질문있습니다.
jpamain 실행시 아래같이 db에는 잘 붙는거 확인했는데요.h2창은 잘뜹니다.근데 강의 18분<아래 그림 참조>정도에 나오는것처럼 db가 안뜹니다.<jpa 실행문구> memberpackage jpabook.jpashop.domain1; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class Member { @Id @GeneratedValue @Column(name="MEMBER ID") private Long id; private String name; private String city; private String street; private String zipcode; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getZipcode() { return zipcode; } public void setZipcode(String zipcode) { this.zipcode = zipcode; } } 파일링크 jpamainimport javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } emf.close(); } }
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
JPQL은 FROM절 없이 실행할 수 없다는게 맞는거죠?
QueryDSL을 공부를 하다가 JPQL은 FROM절 없이 사용할 수 없다는 말을 들었습니다.그래서 그렇구나 이해를 하기보다 정말 그런가 하고 찾아보려고 했는데공식문서를 어디를 참조해야할지 모르겠더라구요오라클 JPA 2.0에서 JPQL 설명이 있는데 그 부분을 참조하면https://docs.oracle.com/javaee/6/tutorial/doc/bnbuf.html#bnbujFROM 절은 식별 변수를 선언함으로써 쿼리의 도메인을 정의합니다.라고 적혀있더라구요 SQL과 다르게 JPQL은 도메인을 기준으로 쿼리를 실행하기 때문에 FROM절을 생략할 수 없다고 이해하면 될까요 ?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티와 테이블 맵핑 네이밍 규칙 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의를 보면 엔티티 클래스에서는 pk 필드를 그냥 id 로 선언하고, 테이블에서는 테이블명_id로 설계하십니다.서로 같은 네이밍을 쓰지 않는 이유가 궁금합니다. 다른 비슷한 질문의 경우 아래와 같이 답변 주셨는데, 엔티티의 PK 필드는 ID로 네이밍 하는다는 규칙을 정한것 뿐이지 큰의미는 없다고 봐도 되는걸까요? order 엔티티도 order_id로 하는게 좋지 않나요? 그렇게 하지 않으신 이유가 order에 이미 memberId 필드가 있어서 그런걸까요? 굳이 order_id라고 명명하지 않아도 memberId와 구분되서 그런건가요? ID 컬럼 혹은 id 필드의 명명 규칙은 강의에서 통일성 있게 위에 정리한 기준에 맞게 작성한 것으로 보시면 될 것 같습니다.(orderId로 하여도 문제 없습니다. 자바에서 변수명은 카멜케이스가 관례입니다.)
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
섹션 4엔티티 매핑 질문입니다.
1. 객체와 테이블 매핑 5분 29초에서@entity역할이 member라는 클래스라는 설계도를 기준으로 그림처럼 meber1entity,meber2entity,meber3entity 이런식으로 나타내게 하는 역할인가요?기본 키 매핑 34분에서 아래그림 빨간색 박스처럼 em.persist(member52)하면 db sql=51 ||52 이렇게 되니까 에러나는거 아닌가요? 50이 아니라 기본 값을 그러면 10000을 줘야 하는거 아니에요? 37분에서는 1번쨰는 1부터 51까지 주고 2번째는 51부터 100까지 준다는데 이게 무슨 뜻인지 이해가 어려워서요..
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
준영속 상태 질문입니다.
1. 위사진에서 분홍색 박스 부분 select가 왜나오는거에요? find를 실행하면 나온느건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 컨텍스트 2 강 질문있습니다.
1. 7분 1초 그림과 7분 9초 그림이랑 차이가 뭔가요? 혹시 7분 1초 그림에서 3번이 7분 9초 그림인건가요?2. 13분에 내부적으로 리프랙션을 하기때문에 동적으로 생성자를 생성해야 한다고 하셨는데요.리프랙션은 뭐고 동적은 무슨의미인가요? 움직임을 뜻하는건 아닌것 같아서요3. 23분에 1번에는 flush() 이렇게 되어있고 4번에는 flush 이렇게 되어있는데 혹시 flush 가 2번 실행되는건가요?첫째코드가 강의 Hello JPA - 애플리케이션 개발28분에 나온 코드이고 2번째코드가 영속성 컨텍스트 2 24분에서 나온코드입니다.List<Member> result=em.createQuery("select m from Member as m",Member.class).getResultList(); //Member 객체를 m으로 별칭하고 객체 m을 선택해라 for (Member member:result){// 각 Member 엔터티에 대해 반복합니다. System.out.println("member name = " + member.getName()); }Member member=em.find(Mmeber.class,150L);를 List<Member> member=em.find(Mmeber.class,150L); 이렇게 바꿔도 되나요? 4.영속성 컨텍스트 2 7분 그림에서요. 그림에서 flash는 3번과정인가요? 아니면 3번과정 직전인 동기화 상태인가요?