월 16,940원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값 타입 컬렉션 대안
값 타입 컬렉션 대안으로 entity에 감싼다고 했는데요예를 들어 @Embedable인 Address를 그냥 처음부터@Entity로 승격시켜버리면 되는데 굳이 왜 감싸나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
두 개의 결과가 동일한데 왜 아래의 방법을 사용해야하나요?
//findMember.getAddress().setCity("new1"); findMember.setAddress(new Address("new1", "street1", "zip1")); 두가지 를 모두 실행했을 때 결과가 동일하였습니다.식별자가 없기 때문에 한번에 다 바꾸어야한다고하였는데어차피 Member 테이블의 address는 하나이므로식별자가 없더라도 명확한 것 아닌가요?따라서 그냥 setCity()와 같이 한 필드만을 바꿔주어도 되는 것이 아닌가 싶습니다. 왜 아래의 코드처럼 전체를 갈아치워야하는지 다시 설명해주시면 감사하겠습니다. ++ 값 타입을 추적이 불가능하다는 뜻을 구체적인 예시와 함께 설명해주시면 감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
실행 질문
.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]4분쯤에 실행했을 때 오류가 납니다.JAVA 11버전이라 dependency 에 추가도 했습니다.영속성 강의 까지는 연동이 잘 되다가 안되네요데이터 베이스 스키마 자동생성 강의에서는 코드를 추가로 입력 안했는데 필요한가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
실행 질문
.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]4분쯤에 실행했을 때 오류가 납니다.JAVA 11버전이라 dependency 에 추가도 했습니다.영속성 강의 까지는 연동이 잘 되다가 안되네요데이터 베이스 스키마 자동생성 강의에서는 코드를 추가로 입력 안했는데 필요한가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
1차 캐시와 동일성 보장
[질문 내용]책 62페이지 강의 내용 16분 50초에 나오는 페이지에서 DB isloation Level이 Read Commit이어도 애플리케이션에서 Repeatable Read를 보장한다고 했는데요.다른 Entity Manager가 update를 했다면 그 경우에는, 다른 값이 조회가 되는 것인가요? ex) EntityManager A, EntityManager B(혹은 다른 서버, DB에서 직접 쿼리 발생)A selectB update, commitA select이렇게 되는 경우, 1과 3의 값은 같으나 2의 값은 다른 것인지 궁금합니다.B서버는 이미 커밋을 진행해서 DB에서의 값은 바뀌었으나, A서버는 DB에서 조회하지 않고 자신의 영속성 컨텍스트에서 조회했으므로 1번과 같은 값을 읽는건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
2-2 (Hello jpa 에러)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]다음과 같은 에러가 발생하였습니다.설정도 다음과 같이 되어있고, h2 콘솔도 새로 생성하여 실행하였습니다. 해당 오류가 왜 발생하는건가요..?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
cascade 수정(?)
안녕하세요 JPA를 사용하다가 질문이 있어서 질문 글 남깁니다 선생님! cascade는 영속성 전이 즉 쉽게 말하면 양방향 연관관계시 자식테이블까지 자동으로 persist를 해주는 걸로 알고 있는데제가 테스트 해본바로는 '수정'을 할때는 변경전파가 되지 않는것 같더라구요.. 그래서 양방향 연관관계 일때 team 따로 수정하고 member따로 수정을 해야 하나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@GeneratedValue 전략 중 IDENTITY와 SEQUENCE 특징에 대해 질문 드립니다.
기본 키 매핑 강의를 수강하다 키 생성 전략과 관련해 궁금한 점이 있어 질문 드립니다. IDENTITY 전략을 사용할 경우 키 값이 DB에 삽입된 이후에 생성되기 때문에, 트랜잭션 커밋 시점이 아닌 em.persist()를 호출할 시점에 쿼리를 DB로 전송한다고 하셨는데요.혹시 이 경우, 문제가 생겨 트랜잭션이 rollback 되는 경우 해당 insert문도 같이 rollback이 될까요? SEQUENCE 전략에서 auto-ddl 설정을 사용하지 않을 때에도 @SequenceGenerator 을 사용하여 기존에 사용 중인 DB 시퀀스와 매핑 시킬 수 있나요??어노테이션의 이름이 Generator라고 지정되어 있어 auto ddl을 사용하는 경우에만 해당 어노테이션이 유효한 건지에 대해 헷갈리더라구요..만약 기존에 DB에서 사용중이던 시퀀스와 매핑시키기 위해서는 @SequenceGenerator 의 SequenceName 속성만 잘 매칭시키면 성능 최적화 등의 전략을 사용할 수 있는 거겠죠..?? 또한 SEQUENCE 전략 사용 시 성능 상의 이슈를 해결하기 위해 allocation을 50과 같이 큰 값으로 할당하여 DB 상에서 한 번에 크게 올리고 메모리에서는 1씩 가져다가 사용하는 방식에 대해 설명 해주시면서 동시성 이슈가 없다고 설명해 주셨는데요! 여러 대의 was와 서로 다른 서버에서 기동되어 메모리가 공유되지 않는 상황에서도 동시성 보장이 가능한 것인가요??...
- 미해결자바 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을 사용하는 방법 외에도 다른 방법이 있을까요?저의 지식으로는 명쾌한 해답이 나오지 않아 질문 드리게 되었습니다. 미리 답변 감사드립니다!!!