월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Many To One 매핑시 JoinColumn을 무조건 대상테이블의 PK로만 걸어야하는지
Many 쪽에서 One쪽으로 @JoinColumn을 지정하게되면 그 컬럼은 곧 FK로 사용되는데ID값이 아닌 다른 Unique한 컬럼을 참조하고 싶다면 대체하여도 상관없을까요???예를들어, 게시판에서 글 작성자를 출력한다고 가정합니다.우선적으로 필요한 값은 Nickname하나뿐입니다.User테이블에는 PK값이 자동증가값과 같은 의미없는 고유번호로 부여하고 있다고 가정합니다.Board테이블에서 User테이블의 고유값 PK가 아닌 Nickname의 값만 가져오고 싶고, 해당 값은 중복이 불가능한 Unique한 값이라면PK값이 아닌 해당 값에 걸어도 무방한지요?만약 게시판에서 닉네임뿐만 아니라 닉네임을 눌렀을때 해당 User의 다양한 정보를 얻기 위하면 PK를 가져오는게 맞다고 생각합니다. 하지만 게시판에 User의 PK값에 FK가 걸려있고(Mapping) Board에서 참조하려는 값이 '단순히 닉네임 단 하나'라고 한다면 PK값을 기준으로 닉네임을 다시 한번 조회해야 하기 때문에 불필요한 쿼리가 발생한다고 생각이 듭니다물론 닉네임으로 매핑을 하더라도 Unique한 특성때문에 닉네임 기준으로 User의 정보를 조회할 수는 있겠으나 Board테이블로부터 테이블이 지속적으로 확장되어 나가고 해당 테이블에 User의 PK가 식별관계로 상속되어나간다면 데이터베이스의 PK의 역할로 볼때는 PK로 지정해주는게 맞다고는 생각합니다...위와같이 매핑되는 FK대상 JoinColumn 필드를 비즈니스적 측면에서 유도리있게 설정해도 무관할까요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
orphanRemoval = true 질문
Order 클래스 list에 orphanRemoval=true 를 주고@OneToMany(mappedBy = "order", cascade = CascadeType.ALL , orphanRemoval=true) private List<OrderItem> orderItems = new ArrayList<>();order.getOrderItems.remove(0); 를 써주면 Order-OrderItem 간의 부모자식 관계가 제거되어서 삭제되는데 추가도 되는지 궁금합니다.주문 리스트 전체 변경을 진행하고 있습니다.Order 가 영속성 컨텍스트에 있을때추가될 Item들 findById로 영속성 컨텍스트로 불러온 다음 OrderItem으로 만든뒤 public void addOrderItem(OrderItem orderItem) { orderItems.add(orderItem); orderItem.setOrder(this); }order.addOrderItem(orderItem1);order.addOrderItem(orderItem2); 다음과 같이 써주면 db에 추가될 수 있나요???제 테스트 상에서는 데이터가 입력이 되어서 부모-관계가 없어지면 삭제되고 , 부모-관계를 연결시켜주면 추가된다고 생각해도 될까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
벌크 연산
... (위에 기존의 코드를 반영 member1,2,3 나이 별도로 설정하지 않음 '0' 현재 persist를 통해 영속성 컨텍스트에 존재하는 상황)int resultCount = em.createQuery("update Member m set m.age = 20") .executeUpdate();em.clear();Member findMember = em.find(Member.class, member1.getId());System.out.println("findMember.getAge() = " + findMember.getAge());System.out.println("resultCount = " + resultCount);System.out.println("member1.getAge() = " + member1.getAge());System.out.println("member2.getAge() = " + member2.getAge());System.out.println("member3.getAge() = " + member3.getAge());int resultCount = em.createQuery("update Member m set m.age = 20") .executeUpdate();이 부분은 영속성 컨텍스트와 상관 없이 DB에 바로 적용 된다고 알고 있습니다.em.clear();하게되면 영속성 컨텍스트를 비우게 되고,Member findMember = em.find(Member.class, member1.getId());System.out.println("findMember.getAge() = " + findMember.getAge());를 하게되면 update를 통해 DB에 저장된 값을 DB에서 불러서 영속성 컨텍스트에 저장하고 해당 값을 가져오고,System.out.println("resultCount = " + resultCount);이 값은 위에서 update를 통해 3개가 update 되었기 때문에 3이란 값이 저장되어 나오고,(궁금한 부분)System.out.println("member1.getAge() = " + member1.getAge());System.out.println("member2.getAge() = " + member2.getAge());System.out.println("member3.getAge() = " + member3.getAge());이 부분의 경우 그냥 메모리에 저장된 값을 가져오는 것이 맞나요? 디버깅을 해보기 이전에 메모리에 생성했던 값을 다시 가르키는 것 같지만 확실한지 모르겠어서 질문 남깁니다...
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
27:45에서 db저장 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]강의 27:35부분에서 db에 멤버가 저장되어 있지 않다고 하시는데, 현재 member 엔티티는 @GenerativeValue를 사용하기 때문에 em.persist(member)하는 순간 db에 저장되고 pk값을 가져오는게 아닌가요? 혹시 제가 잘못이해하고 있는 건지 궁금합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
hibernate.hbm2ddl.auto 속성 적용이 안됩니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]데이터베이스 스키마 자동생성 부분에서 hibernate.hbm2ddl.auto 속성이 적용되지 않습니다. 강의에서는 drop table Member if exists 로그가 찍히는데 저는 속성이 안되는 것인지 아무것도 뜨지 않습니다. Table도 다시 생성되어야하는데 생성되지 않습니다.H2 버전은 1.4.200입니다.프로젝트 zip 파일입니다.https://drive.google.com/file/d/1-USqDSZYjzSjQuMZ4t8cQSMsS6j4ez-s/view?usp=drive_link
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
커밋이 안됩니다...
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 위처럼 비밀번호랑 경로 전부 같게 하고 연결해서 커밋해보면 커밋이 되지 않는데 어찌해야하나요...
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
sequence 전략 allocation 사이즈
2서버를 운영할 때 allocation 사이즈를 50 준다면 A B가 동시 실행될 때 A = Seq 1~50B = Seq 51 ~ 100 씩 할당 받게된다면 insert문 발생시B는 id값이 51부터 사용되어서 저장되어지나요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
일대다 연관관계에 관해서
@JoinColumn의 경우 주인이 되는 테이블의 컬럼을 넣는 것으로 알고 있습니다.@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)@JoinColumn(name = "MEMBER_ID")private List<AddressEntity> addressHistory = new ArrayList<>();의 코드에서 혹시 반대로 AddressEntity에서 다대일 관계를 만들어 주고 싶은 상황이라면 (현재 강사님 코드에는 AddressEntity클래스에 Member엔티티에 대한 객체가 없는 상황) AddressEntity 클래스에 @ManyToOne@JoinColumn(name = "MEMBER_ID"private Member member를 생성해주는게 맞는 궁금하여 문의 남깁니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.close()한 경우에도 업데이트 문이 실행되는데요.
이렇게 실행했는데, 로그에 업데이트 쿼리가 찍히네요.실제 사용할때는 트랜잭션 종료 이후에 em.close() 실행될텐데...테스트 코드라서 이상한긴 한데 좀 궁금하네요.public class JpaDetachMain {public static void main(String[] args) {final EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); final EntityManager em = emf.createEntityManager(); final EntityTransaction tx = em.getTransaction(); tx.begin(); try{//영속 Member member = em.find(Member.class, 10L); member.setName("111"); em.close(); System.out.println("=============="); tx.commit(); }catch (Exception e){tx.rollback(); }finally {em.close(); emf.close(); }}}
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
복합키(EmbeddedId) 사용시 도커환경에서 API Empty Value 반환 이슈
안녕하세요 영한님,영한님 강의중 QueryDsl, JPA 다 시청한 수강자인데따로 복합키 복합키 EmbeddedId 를 언급하는 강의가 없어 여기에 질문 남기는점 죄송합니다,현재 복합키로 구성되어있는 엔티티를 QueryDSL로 조회하여 반환하는 API를 설계했는데 로컬 IDE 즉 제 로컬 인텔리제이에서 빌드해서 Application을 띄울 시에 원하는 시나리오대로 DB의 저장되어있는 데이터를 반환하지만, Image 환경 즉 Docker Container, ECS 환경에서 이 JAR 파일을 빌드시에 쿼리는 잘 나가지만 데이터가 불러와지지 않는 현상이 발견됩니다,(제 로컬에서 터미널을 통해 Jar파일을 빌드해도 잘 됩니다.)복합키로 구성되어있는 테이블중 다른 일반타입의 필드(컬럼)만을 조회할땐 문제가 없지만 복합키중 일부 컬럼을 같이 조회할 시 이런 현상이 발견되고 있습니다.. 이런 이슈를 겪어본적이 있으신지 아니면 이 문제에 대해 해결방법이 있는지 궁급합니다. +++@Query 어노테이션으로 네이티브 쿼리를 짜봐서 도커 환경에서 테스트 해봤는데 네이티브 쿼리는 또 정상작동을 하네요...
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
hibernate.hbm2ddl.auto create로 했을 때
외래키 제약들이 걸려있어서 테이블이 삭제 될 때 순서대로 삭제하는 것이 아니라 막 삭제해서 제대로 테이블이 삭제되지않습니다org.h2.jdbc.JdbcSQLSyntaxErrorException: Cannot drop "CATEGORY" because "FKPEKL6BDCJ36BTQ87GKJ9MLDNQ" depends on it; SQL statement해당 경우는 어떻게 해결하나요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
낙관적 락 엔티티 관련
안녕하세요.낙관적 락을 공부하며 생긴 질문을 드립니다..@Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Stock { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long productId; private Long quantity; @Version private Long version; @Builder public Stock(Long productId, Long quantity) { this.id = null; this.productId = productId; this.quantity = quantity; this.version = 0L; } public void decrease(Long quantity) { if(this.quantity - quantity < 0) throw new IllegalArgumentException("재고가 부족합니다."); this.quantity -= quantity; } }위와 같이 Entity 를 작성하였습니다. 실행환경은 MySQL 입니다. 동작 과정은 다음과 같습니다.엔티티를 생성하고..JpaRepository 인터페이스를 상속받은 Repository 의 save 메서드의 파라미터로 엔티티를 전달하였습니다..저는 여기서 파라미터로 전달한 엔티티 인스턴스가 영속 상태로 관리될 것이라 생각했습니다.(일반적으론 그렇더라구요..)그런데 version 프로퍼티 때문인지.. 영속성 컨텍스트에 관리되는 엔티티는 파라미터로 전달한 엔티티 인스턴스가 아니라.. JPA 가 만들어낸 새로운 인스턴스였습니다..(파라미터로 전달한 엔티티 인스턴스에는 id 가 채워지지 않았습니다.) 해당 상황에 대해.. 원리와 이유가 궁금합니다.. 늘 감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA 쿼리 로깅 관련해서 질문이 있습니다.
선생님 안녕하세요 하나 질문이 있습니다. Jpa 사용할때 쿼리를 로그에 찍도록 설정했고 잘 동작합니다. 그런데 그냥 실행시킬때는 찍히지 않는 쿼리가 브레이크 포인트를 걸어서 한줄씩 실행시킬때는 로그에 출력되는 경우가 있습니다. 혹시 이유가 있을까요? 브레이크 포인트를 걸면 select 쿼리가 더 많이 찍혀서 궁금해 문의드립니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
값타입에서 엠비디드를 사용할 때 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Address를 만들 때 값 타입은 불변으로 만들어야 해서 setter을 빼라고 말씀하셨고 생성할 때 new Address로 해서 만들던데 혹시 @builder도 사용하면 안되나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티매니저의 flush(), clear() 호출 빈도가 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]>> 개발환경hibernate-core:5.6.15.Final자바 17>> 질문안녕하세요. Team team = new Team(); team.setName("teamA"); manager.persist(team); Member member1 = new Member(); member1.setName("hello1"); member1.setTeam(team); manager.persist(member1); manager.flush(); manager.clear(); Member m = manager.find(Member.class, member1.getId()); System.out.println("m = " + m.getTeam().getClass()); // Proxy System.out.println("=============="); m.getTeam().getName(); System.out.println("=============="); System.out.println("m = " + m.getTeam().getName());프록시 설명해주실 때 엔티티 매니저의 flush(), clear()를 호출해서 1차 캐시를 비웁니다. 실무에서 이렇게 코드 중간에 1차 캐시를 비우는 일이 잦은가요? 프록시 객체의 존재를 확인시켜주기 위해서 호출하신 건지, 실제로 실무에서 프록시 객체를 사용하기 위해(?) 중간에 flush(), clear()을 사용하는 일이 있는지 궁금합니다 1차 캐시를 강제로 비우지 않는 한은 Query 문 나갈 일 없이 영속성 컨텍스트에서 데이터를 가져오는 일이 대부분일 것 같아서요! 복잡한 쿼리를 JPQL로 작성할 때는 Lazy loading을 적용하고 필요한 객체들이 그때그때 프록시를 통해 초기화되는 일이 자주 있겠지만, 강제로 1차 캐시를 비우는 일은 거의 없지 않나 하는 생각이 들어 질문드립니다.감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
기본 인텔리제이 maven 세팅관련
우선 저는 일반 Maven이 아니라 Maven archetype 으로 프로젝트가 생성이 되더라고요 찾아보니 큰 문제는 아닌 거 같아 진행을 하였습니다.우선적으로 자바 18을 사용하려니 사용이 안돼서 jdk 1.8.0 사용하였고 아래와 같이 h2는 지금 다운받은 서버 버전을 하이버네이트는 강의 pdf그대로 사용하였습니다. 아래처럼 경고는 아니지만 위험표시정도가 뜨는것을 확인할 수 있었고 버전 업그레이드 권장인거 같길래 넘어가고 persistence.xml 설정을 해주었습니다. 우선적으로 저는 resource 밑에 META_INF.maven이라는 파일이 존재하기에 해당 파일에 persistence.xml을 붙여 놓고 빌드를 해주었고 그 상태로 JpaMain을 다음과 같이 작성하고 빌드한 결과 위처럼 강의와는 다른 내용의 오류가 떴습니다. 아무래도 META_INF.maven하위의 persistence 를 인식 못하는것 같아 META_INF 디렉토리를 새로만들어주고 persistence.xml을 옮겨주었지만 그래도 똑같은 오류가 발생합니다 . 이유가 무엇일까요..
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값 타입 컬렉션 삭제부분에서 이해가 안가는곳이 있는데요
챕터9 값 타입 컬렉션 25분Address 값 타입 컬렉션 삭제 부분입니다. 우선 삭제되는 부분만 확인하고 싶어서, 새로운 값을 추가하지는 않았습니다.System.out.println("========== 값 타입 컬렉션 주소 삭제================"); findMember.getAddressHistory().remove(new Address("old1", "street", "zipcode")); 데이터는 정상적으로 삭제되었는데, 저는 왜 Member테이블에 대해 update쿼리가 나가는지가 이해가 안가는데요,Member 테이블에서는 수정사항이 발생할게 없는데 왜 update쿼리도 발생했는지 알 수 있을까요? 혹시 몰라 코드 전체와 결과 남깁니다. Member member = new Member(); member.setUsername("member1"); member.setHomeAddress(new Address("homeCity","street","zipcode")); member.getFavoriteFoods().add("꾸부라꼬"); member.getFavoriteFoods().add("카페라떼"); member.getFavoriteFoods().add("회"); member.getAddressHistory().add(new Address("old1", "street", "zipcode")); member.getAddressHistory().add(new Address("old2", "street", "zipcode")); em.persist(member); em.flush(); em.clear(); System.out.println("================== 조회 시작 =================="); Member findMember = em.find(Member.class, member.getId()); System.out.println("================== 컬렉션은 지연로딩, Addr 조회 =================="); List<Address> addressHistory = findMember.getAddressHistory(); for(Address address : addressHistory) { System.out.println("address = " + address.getCity()); } System.out.println("================== 컬렉션은 지연로딩, favorite food 조회 =================="); Set<String> favoriteFoods = findMember.getFavoriteFoods(); for(String favoriteFood : favoriteFoods) { System.out.println("favoriteFood = " + favoriteFood); } Address homeAddress = findMember.getHomeAddress(); findMember.setHomeAddress(new Address("new change city", homeAddress.getStreet(), homeAddress.getZipcode())); findMember.getFavoriteFoods().remove("꾸부라꼬"); findMember.getFavoriteFoods().add("무화과 크림치즈 베이글"); System.out.println("========== 값 타입 컬렉션 주소 삭제================"); findMember.getAddressHistory().remove(new Address("old1", "street", "zipcode")); tx.commit(); Hibernate: /* insert hellojpa.Member */ insert into Member (city, street, zipcode, USERNAME, MEMBER_ID) values (?, ?, ?, ?, ?) Hibernate: /* insert collection row hellojpa.Member.addressHistory */ insert into ADDRESS (MEMBER_ID, city, street, zipcode) values (?, ?, ?, ?) Hibernate: /* insert collection row hellojpa.Member.addressHistory */ insert into ADDRESS (MEMBER_ID, city, street, zipcode) values (?, ?, ?, ?) Hibernate: /* insert collection row hellojpa.Member.favoriteFoods */ insert into FAVORITE_FOOD (MEMBER_ID, FOOD_NAME) values (?, ?) Hibernate: /* insert collection row hellojpa.Member.favoriteFoods */ insert into FAVORITE_FOOD (MEMBER_ID, FOOD_NAME) values (?, ?) Hibernate: /* insert collection row hellojpa.Member.favoriteFoods */ insert into FAVORITE_FOOD (MEMBER_ID, FOOD_NAME) values (?, ?) ================== 조회 시작 ================== Hibernate: select member0_.MEMBER_ID as member_i1_6_0_, member0_.city as city2_6_0_, member0_.street as street3_6_0_, member0_.zipcode as zipcode4_6_0_, member0_.USERNAME as username5_6_0_ from Member member0_ where member0_.MEMBER_ID=? ================== 컬렉션은 지연로딩, Addr 조회 ================== Hibernate: select addresshis0_.MEMBER_ID as member_i1_0_0_, addresshis0_.city as city2_0_0_, addresshis0_.street as street3_0_0_, addresshis0_.zipcode as zipcode4_0_0_ from ADDRESS addresshis0_ where addresshis0_.MEMBER_ID=? address = old1 address = old2 ================== 컬렉션은 지연로딩, favoritfood 조회 조회 ================== Hibernate: select favoritefo0_.MEMBER_ID as member_i1_4_0_, favoritefo0_.FOOD_NAME as food_nam2_4_0_ from FAVORITE_FOOD favoritefo0_ where favoritefo0_.MEMBER_ID=? foavortefood = 꾸부라꼬 foavortefood = 회 foavortefood = 카페라떼 ========== 값 타입 컬렉션 주소 삭제================ Hibernate: /* update hellojpa.Member */ update Member set city=?, street=?, zipcode=?, USERNAME=? where MEMBER_ID=? Hibernate: /* delete collection hellojpa.Member.addressHistory */ delete from ADDRESS where MEMBER_ID=? Hibernate: /* insert collection row hellojpa.Member.addressHistory */ insert into ADDRESS (MEMBER_ID, city, street, zipcode) values (?, ?, ?, ?) Hibernate: /* delete collection row hellojpa.Member.favoriteFoods */ delete from FAVORITE_FOOD where MEMBER_ID=? and FOOD_NAME=? Hibernate: /* insert collection row hellojpa.Member.favoriteFoods */ insert into FAVORITE_FOOD (MEMBER_ID, FOOD_NAME) values (?, ?) Process finished with exit code 0
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
여러 계층의 상속관계 질문
안녕하세요.상속관계 매핑을 할 때 예를 들어 위와 같이 Item을 상속받는 Book, Album, Movie, TVSerise의 4개의 품목이 있다고 했을 때, 비슷한 속성끼리 중간에 묶는 방법에 대해 질문드리고 싶습니다.상속관계를 한 단계 더 쓰고 싶은 이유는 일부 항목들끼리는 자주 엮어서 조회할 일이 있는데 그 때마다 두 객체를 모두 불러오는 게 번거롭게 느껴져서 입니다.이전에 비슷한 질문을 드렸었는데 김영한 강사님께서 이런 경우 상속관계보다는 연관관계를 사용하기를 추천하신다고 말씀 주셨었어요. 조금만 더 자세히 설명 부탁드리겠습니다.감사합니다!ps. 다른 글에서 추천해주신 draw.io 좋아요. 감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
변경감지를 사용하여 db 데이터 업데이터 시 sql이 2번 실행되는 것에 대한 성능
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.김영한님 JPA 강의를 다 듣고 개발을 하던 도중 궁금한게 생겼습니다.Entity를 변경 감지를 통해 데이터를 바꿀 시 select 쿼리를 통해 데이터를 불러오고 수정하게 되면 update 쿼리가 한번사용되어 총 2번의 sql로 데이터를 바꾸게 되는데,그냥 "update ~~~ where id = ?" 이런 식으로 데이터를 바꾸게 되면 한 번의 sql로 데이터를 바꾸니까 성능 상 더 좋은 부분이 생길수도 있나? 라는 생각을 하게됩니다. 여기서 답변 받고 싶은 부분은이 부분은 아주 미묘한 차이니까 무시하는 것인가?실제로 자주 변경되는 데이터는 성능상에 이유로 update 쿼리를 한 번만 직접 날려 처리하는 경우도 있는가? (벌크 연산제외)변경 감지로 데이터를 update하는 것의 장점들도 궁금합니다. 제가 예전에 강의를 들어서 혹시 영한님이 언급하셨는데 못 찾고 있는건가라는 생각도 들지만 궁금해서 여쭤봅니다!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
onetoone 페치전략 설정 질문입니다
0:21 에 @ManyToOne 과 @OneToOne은 기본이 즉시로딩이므로 지연로딩으로 변경하라는 설명입니다.제가 궁금한것은 @OneToOne 단방향은 jpa에서 지원이 안되고 양방향으로 설정해야하고 이때 지연로딩으로 설정하거나 아예 설정자체를 하지않아도 기본적으로 즉시로딩으로 된다고 알고있는데 제가 잘못알고있는건가요?=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.