월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
프로젝트 생성부터 문제에 부딪혔습니다.
안녕하세요, Hello JPA - 프로젝트 생성 에서 Windows의 IntelliJ IDEA 2023.1(Community Edition) 설치해서 File->New->Project 들어갔는데 강의 화면과 다른 관계로 오류가 있는거 같습니다.저는 maven 이 없어서 maven archetype 을 선택하고, Catalog에 internal, default local, maven central 바꿔가면서 add archetype 에서 영한 강사님이 예시로 보여준 문구들을 넣어서 프로젝트를 만들었는데요, 아래와 같은 오류 메세지가 뜹니다.The desired archetype does not exist (jpa-basic:ex1-hello-jpa:1.0.0) 최신 IntelliJ로 프로젝트 생성을 위해서는 어떻게 설정해야 할까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JpaRepository save 에 비해서 saveAndFlush 사용하면 문제점이 있을까요?
강사님 안녕하세요~ 스프링 JpaRepository 의 save , saveAndFlush 가 있는데 리포지토리.save(엔티티)리포지토리.saveAndFlush(엔티티) 저는 개발자 입장에서 디버깅 할 때 제가 작성한 코드가 바로 db에 넘어가는 파라미터값과, db에 바로 적용 되는걸 보고 싶어서저는 saveAndFlush 를 선호해서 사용하고 있습니다. save 메서드에 비해서 ( save 는 캐시?에 저장하고 있다가 나중에 한꺼번에 반영이 되니 눈으로 바로 볼수 없어요 ㅠㅠ )saveAndFlush 를 쓰면 비지니스 로직을 적용하거나 서비스 로직 적용 시문제 가능성 부분이 혹시 있을까요?알려 주신 다면 유념해서 생각해 보려구 합니다 (참고로 저희 회사 시스템에는 @Transactional 애노테이션만 걸어주고 강사님 강의에서 처럼 em.persist => 이부분은 사용하지 않습니다 ) #김영한#JpaRepository#saveAndFlush#save#문제점#jpa#스프링#스프링프레임웍
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA Composite key(복합키) @IdClass , @EmbeddedId 어떤 걸 쓸 지 장단점 및 선정 기준이 궁금합니다
강사님 안녕하세요~ 저희 플랫폼회사에서는 @EmbeddedId 만 쓰고 있고강사님의 책을 읽어 봤을 때는 @IdClass -> db 스럽다@EmbeddedId -> 객체 스럽다, id.컬럼 으로 좀 더 코드가 더 들어간다라고 표현하십니다. 강사님이 실전 실무에서 JPA Composite key(복합키) @IdClass , @EmbeddedId둘중에 어떤걸 선호호고 많이 쓰는지 장단점 뭔지,배달에민족 시스템에서는 어떤 이유로, 둘 중 어떤 걸 사용 하는지 알 수 있을까요? --█●●--------------------------------------------#김영한#@IdClass#@EmbeddedId#join#조인#멀티#컬럼#여러개#multiple#column#JPA--█●●--------------------------------------------
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
강의 8:33 내용 질문드립니다.
회원 1이 DB에서 팀을 가져온 후, 팀 A가 영속성 컨텍스트에 존재하는 것은 알겠습니다!근데 "회원 2가 JPA에게 팀 A를 달라고 한다" 는 부분이 이해가 잘 되지 않습니다!프록시 팀 객체가 어떠한 근거로 팀 A를 달라고 하게 되나요? 첫 SELECT문과, 회원 1이 팀을 가져오는 쿼리 로그를 보니,뭔가 팀 ID를 들고 있는 것 같은데, 첫 SELECT문에서 가져온 결과의 팀은 비어있긴 한데 ID는 들고 있는 상태로 존재하는 것이 맞을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
복합키 다 대 일 단방향 연관관계 @ManyToOne @Fetch 설정 방법 문의 드립니다.
강사님 안녕하세요 ~ 아래 질문은 먼저드린 질문과 다른 질문입니다.아래 첨부이미지 확인해주세요 저는 ComCorpUser.bizCd / teamCd 와ComBizTeam 에 있는 복합키의CombizTeamPK 의 속에 있는 bizCd / teamCd 와@ManyToOne @Fetch 애노페이션 연결 고리를 걸어서다대일 단방향 연관관계를 맺고 싶습니다.ComCorpUser 클래스의 java 파일을 어떻게 만들어야 할까요?강사님이 직접 1개의 클래스 java 파일을 만들어서보여 주실 수 있을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
복합키 있는 테이블 조인시 방법 문의 드립니다.
안녕하세요 강사님~ 아래와 같은 엔티티가 있다고 가정 할 때 유저정보(ComCorpUser) 조회 시 연관관계를 이용해서 유저정보에 연결된 업체코드(BIZ_CD) 조인조건을 걸어서업체팀코드(ComBizTeam) 를 가져오려고 합니다 --█●●--------------------------------------------COM_CORP_USER (유저정보)ComCorpUser 클래스 USR_ID 유저아이디 BIZ_CD 업체코드 TEAM_CD 팀코드--█●●--------------------------------------------COM_BIZ_TEAM (업체별팀정보)ComBizTeam @EmbeddedId private ComBizTeamPK id;//=>아래 ComBizTeamPK 복합키 사용 BIZ_CD 업체코드 TEAM_CD 팀코드 TEAM_NM 팀명 --█●●--------------------------------------------COM_BIZ_TEAM (업체별팀정보) 복합키@Embeddablepublic class ComBizTeamPK BIZ_CD TEAM_CD TEAM_NM --█●●--------------------------------------------//사용자정보public class ComCorpUser { private static final long serialVersionUID = 1L; @Column(name="BIZ_CD") private String bizCd; @Fetch(FetchMode.JOIN) @ManyToOne @NotFound(action = NotFoundAction.IGNORE) @JoinColumn( name="BIZ_CD" , referencedColumnName ="ID.BIZ_CD" , insertable=false, updatable=false) private ComBizTeam comBizTeamInfo; @Column(name = "TEAM_CD") private String teamCd; //업체별팀코드 public class ComBizTeam { private static final long serialVersionUID = 1L; @EmbeddedId private ComBizTeamPK id; //업체별팀코드 복합키 public class ComBizTeamPK implements Serializable{ private static final long serialVersionUID = 1L; @Column(name="BIZ_CD") private String bizCd; @Column(name="TEAM_CD") private String teamCd; --█●●-------------------------------------------- JPA 사용시 특정 유저 테이블과 코드성 업체팀코드 테이블 과 조인 조회 시에 @EmbeddedId 복합키와 조인을 하려고 합니다.구글도 찾아보고, 제가 생각했던 대로 표현을 하면 에러가 발생하네요 @JoinColumn 부분 테스트 1. referencedColumnName ="id.BIZ_CD" => 서버재시작시에러 Invocation of init method failed; nested exception is org.hibernate.MappingException: Unable to find column with logical name: id.BIZ_CD in org.hibernate.mapping.Table(COM_BIZ_TEAM) and its related supertables and secondary tables 테스트 2. referencedColumnName ="ID.BIZ_CD" => 서버재시작시에러 Unable to find column with logical name: ID.BIZ_CD in org.hibernate.mapping.Table(COM_BIZ_TEAM) and its related supertables and secondary tables 테스트 3. referencedColumnName ="BIZ_CD" => 서버재시작시에러 referencedColumnNames(BIZ_CD) of ComCorpUser.comBizTeamInfo referencing ComBizTeam not mapped to a single property 질문1.복합키 조인시 뭔가 방법이 있을거 같은데 제가 어떻게 변경해야 하는지 가르침 부탁드립니다. 질문2.혹시, 김영한 강사님이 JPA 공부를 위해서 자주 참조 하시는 JPA 관련 해외 잘되어 있는 레퍼런스 사이트나, 좋은 블로그가 있다면 수강생들을 위해 공유 부탁드립니다. (막힐때 마다 구글링/블로그 뒤지기 전에 만약 알려주시면 그부분에서 먼저 찾아보거나 더 공부 하려고 합니다) 감사합니다. 수고하세요 #테이블#조인#table#join#JoinColumn#EmbeddedId #join#컬럼#여러개#multiple#column#JPA
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
지연 로딩(+ 변경감지..?) 에 대해 질문 드립니다.
지연 로딩으로 인한 프록시 객체는 실제 사용 시에 쿼리가 나가는 것으로 생각했으나,생각과 달리 동작하여 질문을 드립니다.> followers, followings는 LAZY로 설정되어 있습니다.this.followings.add() 호출 시점에 Lazy Loading이 수행되어 쿼리가 나갈 것으로 예상했으나, 다음과 같은 출력입니다. getFollowers().size() 호출 시에야 실제 쿼리가 나가는 것으로 보입니다. 필드에 getter가 아닌 직접 접근이 문제였는지 테스트 해보았는데, 직접 액세스 시에도 초기화는 진행되는 것으로 확인됐습니다. 추측가는 바는...Q1. 혹시 컬렉션의 메소드별(add() , size())로 초기화가 진행되고 아니고 차이가 있을까요?Q2. 위 경우, 아무튼 메모리 상 컬렉션에만 객체를 저장한 상태가 됐습니다. 근데, size() 호출 시에 DB에서 끌어온 컬렉션과, 메모리에 올라간 1개가 합쳐진 개수가 잘 합쳐진 것 같습니다. followers 같은 경우 엔티티에 스냅샷도 없어야 할 상황인 것 같은데, 작동 원리가 궁금합니다!
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
학습적인 질문보다는 저작권에 대해서 문의 드립니다.
안녕하세요. 제가 개인 프로젝트를 준비하고 있는 와중에 JPA를 도입 하면서 현재 강의를 수강하게 되었습니다.개인프로젝트를 만들면서 기술블로그 카테고리를 만들 예정입니다. 여기에는 개인프로젝트를 진행하면서 발생하는 이슈나 혹은 기초 지식부터 공부한 내용을 정리하는 블로그로 현재는 생각 하고 있습니다.기술 블로그 내용에는 김영한 프로님의 시청 중인 강의 내용과 프로님의 책을 참고하여 적어보고 싶습니다만 출처는 분명 밝히겠지만 이렇게 여쭤보지 않고 블로그를 작성 한다는 것이 프로님 포함하여 강의를 준비하신 노력과 책을 써주신 분들을 무시하는 것 같습니다. 더 나아가 노력 해주신 많은 분들이 기분이 나쁠수 있겠다 싶어 당황스럽고 진부 하실지는 모르겠으나, 혹시 허락을 여쭤보자 이렇게 질의 응답에 문의 드립니다.만일 이에 조금이라도 불편하신 부분이 있다면 더는 여쭤보지 않겠습니다.답변 부탁드리겠습니다. 감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
cascade option 적용 후 부모 객체 삭제시 쿼리의 수 질문
1.코드상황Member(부모), Latter(자식)의 양방향 연관관계로 매핑되어있고 Member 1개에 Latter2개가 저장되어 있는데 이를 지우는 과정에서의 쿼리 개수가 예상과 다른 상황입니다."delete from latter where latter_member_id = ?" 하나가 나와 다 지울 줄 알았으나"delete from latter where latter_id = ?""delete from latter where latter_id = ?"총 2번 쿼리가 나갑니다. 2.코드Latter.classpackage dev.devpool.domain; import dev.devpool.domain.enums.IsCheck; import javax.persistence.*; import static javax.persistence.EnumType.STRING; @Entity public class Latter { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "LATTER_ID") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "MEMBER_ID") private Member member; private String body; @Enumerated(STRING) private IsCheck isCheck; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Member getMember() { return member; } public void setMember(Member member) { this.member = member; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public IsCheck getIsCheck() { return isCheck; } public void setIsCheck(IsCheck isCheck) { this.isCheck = isCheck; } } Member.classpackage dev.devpool.domain; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "MEMBER_ID") private Long id; private String name; private String nickName; private String email; private String password; public Member() { } public Member(String name, String nickName, String email, String password) { this.name = name; this.nickName = nickName; this.email = email; this.password = password; } @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) private List<Certificate> certificates = new ArrayList<>(); @OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true) private List<Latter> latters = new ArrayList<>(); public List<Latter> getLatters() { return latters; } public void setLatters(List<Latter> latters) { this.latters = latters; } public void setId(Long id) { this.id = id; } public List<Certificate> getCertificates() { return certificates; } public void setCertificates(List<Certificate> certificates) { this.certificates = certificates; } public Long getId() { return id; } public void setId(long id) { this.id = id; } public void setName(String name) { this.name = name; } public String getName() { return name; } public String getNickName() { return nickName; } public void setNickName(String nickName) { this.nickName = nickName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } /** * 편의 메서드 */ public void addCertificate(Certificate certificate) { certificate.setMember(this); certificates.add(certificate); } public void addLatter(Latter latter) { latter.setMember(this); latters.add(latter); } } MemberService의 deleteByIdpublic void deleteById(long memberId) { Member findMember = em.find(Member.class, memberId); if (findMember != null) { em.remove(findMember); } } Test코드@Test public void 쪽지삭제ByMember() { transactionTemplate.execute(status -> { //given Member member = new Member(); Latter latter1 = new Latter(); Latter latter2 = new Latter(); member.addLatter(latter1); member.addLatter(latter2); memberService.join(member); em.flush(); em.clear(); //when memberService.deleteById(member.getId()); em.flush(); em.clear(); //then List<Latter> latters = latterService.findAllByMemberId(member.getId()); assertEquals(0, latters.size()); return null; }); } 쿼리 결과Hibernate: select member0_.member_id as member_i1_2_, member0_.email as email2_2_, member0_.name as name3_2_, member0_.nick_name as nick_nam4_2_, member0_.password as password5_2_ from member member0_ where member0_.email=?Hibernate: insert into member (member_id, email, name, nick_name, password) values (default, ?, ?, ?, ?)Hibernate: insert into latter (latter_id, body, is_check, member_id) values (default, ?, ?, ?)Hibernate: insert into latter (latter_id, body, is_check, member_id) values (default, ?, ?, ?)Hibernate: select member0_.member_id as member_i1_2_0_, member0_.email as email2_2_0_, member0_.name as name3_2_0_, member0_.nick_name as nick_nam4_2_0_, member0_.password as password5_2_0_ from member member0_ where member0_.member_id=?Hibernate: ***select certificat0_.member_id as member_i3_0_0_, certificat0_.certificate_id as certific1_0_0_, certificat0_.certificate_id as certific1_0_1_, certificat0_.body as body2_0_1_, certificat0_.member_id as member_i3_0_1_ from certificate certificat0_ where certificat0_.member_id=?Hibernate: select latters0_.member_id as member_i4_1_0_, latters0_.latter_id as latter_i1_1_0_, latters0_.latter_id as latter_i1_1_1_, latters0_.body as body2_1_1_, latters0_.is_check as is_check3_1_1_, latters0_.member_id as member_i4_1_1_ from latter latters0_ where latters0_.member_id=? *** ***Hibernate: delete from latter where latter_id=?Hibernate: delete from latter where latter_id=? ***Hibernate: delete from member where member_id=?Hibernate: select latter0_.latter_id as latter_i1_1_, latter0_.body as body2_1_, latter0_.is_check as is_check3_1_, latter0_.member_id as member_i4_1_ from latter latter0_ where latter0_.member_id=? 3.질문Q1) *** *** 부분에서 cascade 및 양방향으로 걸려있는 것들에 대해 다시 select 쿼리가 날라가는 이유가 무엇인가요? Q2) 왜 latter_id를 바탕으로 쿼리가 2개 나가나요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA 1차 캐시와 쓰기지연 DB 질문 드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. 강의 잘 듣고 있습니다.JPA를 쓸 때 persist()를 호출하면 1차 캐시에 엔티티가 저장되고(영속엔티티), insert쿼리가 쓰기지연 DB에 입력되는 것으로 알고 있는데요.이때 영속된 엔티티의 필드값을 바꾸게 되면 flush될 때 변경감지가 동작해서 update쿼리를 쓰기지연 저장소에 넣게 된다고 알고 있습니다.이제 질문 드리겠습니다. 1) 우선 제가 이해한 persist와 flush의 동작이 맞을까요?2) 맞다면, 비용측면에서 쓰기지연DB에서 DB로 값을 밀어넣어 줄 때 insert, update쿼리 따로 나갈게 아니라, insert쿼리(수정된 필드값까지 고려된 insert문)만 나가면 더 효율적일 것 같은데 왜 insert와 update가 나가는건가요? 하이버네이트 특성이라면 왜 그렇게 동작해야만 하는지..알려주실 수 있을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
코드 질문 드려요
orderitem.setOrder(this)여기서 this< 넘기는데setOrder(Order order) order로 받아요this 가 어떤정보를 넘기는건가요?Order 클래스 주소를 넘기나요? 자바 orm 표준 jpa 책 예제 보고잇는데요GitHub - holyeye/jpabookch06-model3 코드입니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
DAO, DTO와 같은 용어
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]DAO, DTO와 같은 용어들도 해당 강의에서 설명해주시나요?아니면 개인적으로 따로 학습하면 되는 것일까요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
일대다 DB 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요. JPA 관련 강의를 열심히 수강하고 있습니다. 일대다[1:N] 부분에서 영상 시작부분부터 7분 정도까지 내용을 들으면서 실습을 하는데 질문이 있습니다.1. 강사님이 보여주시는 화면처럼 insert문은 출력이 되는데 H2 DB에는 들어가지 않습니다. 무엇이 문제일까요? 아래에는 강의를 보면서 입력한 Member, Team, JpaMain 코드와 H2 콘솔창에 입력값이 출력되지 않는 화면입니다.2. 그리고 강사님이 하신 것처럼 Team에서 @OneToMany @JoinColumn(name = "TEAM_ID")로 어노테이션을 붙였는데 왜 H2 DB에 제 MEMBER 테이블에는 TEAM_ID 컬럼이 출력되지 않는걸까요?아직 많이 미흡한 수준이라 친절하게 알려주시면 정말 감사하겠습니다!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
TABLE_PER_CLASS 와 @MappedSuperclass 와의 차이점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]상속전략중 TABLE_PER_CLASS 와 @MappedSuperclass 와의 차이점이 무엇인가요?둘다 부모테이블은 만들지 않고 필드들만 자식테이블에 들어가는게아닌가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.remove 동작 안함 이유?
Member.classpackage dev.devpool.domain; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "MEMBER_ID") private long id; @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) List<Child> children = new ArrayList<>(); public List<Child> getChildren() { return children; } public void setChildren(List<Child> children) { this.children = children; } private String name; private String nickName; private String email; private String password; public Member() { } public Member(String name, String nickName, String email, String password) { this.name = name; this.nickName = nickName; this.email = email; this.password = password; } public long getId() { return id; } public void setId(long id) { this.id = id; } public void setName(String name) { this.name = name; } public String getName() { return name; } public String getNickName() { return nickName; } public void setNickName(String nickName) { this.nickName = nickName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } Child.classpackage dev.devpool.domain; import javax.persistence.*; @Entity public class Child { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @ManyToOne @JoinColumn(name = "MEMBER_ID") private Member member; public long getId() { return id; } public void setId(long id) { this.id = id; } public Member getMember() { return member; } public void setMember(Member member) { this.member = member; } }로 부모를 Member 자식을 Child로 만들고 delete 시 cascade가 적용되는지를 체크하려 하였습니다. MemberRepository에서 delete 쿼리를 아래와 같이 작성하였습니다.Test 코드는 아래와 같습니다.@Test public void ss() { Member member = new Member(); member.setName("김우"); member.setEmail("rereers15@naver.com"); member.setPassword("taeu4"); member.setNickName("귀요미"); Child child = new Child(); child.setMember(member); member.getChildren().add(child); memberService.join(member); em.flush(); em.clear(); System.out.println("================"); memberService.delete(member.getId()); System.out.println("================"); } SQL 하지만 em.remove 부분이 동작하지 않습니다.이유가 무엇인가요? ** save메서드에서 저장 후 remove()를 하는 것을 실험해보았는데 이 경우는 delete 쿼리까지 정상 출력됩니다. 영속성 컨텍스트와 @Transaction과 관련된 이슈인 것같은데 이와 관련해서 설명해주시면 감사하겠습니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Entity Builder 패턴과 값 수정 관련해서 질문드립니다.
Entity의 경우 불변성을 위해 Setter를 사용하지 않고 Builder패턴을 사용중인데요.불편한점이 생겼습니다. 회원 Entity의 경우 필드가 30개 정도 되는데요.패스워드 3회 실패 시 상태값(isActive) 필드만 수정을 하고 싶은데Setter가 있다면 해당 회원ID로 조회 후 memberEntity.setIsActive(False)로 입력해주면DirtyChecking으로 간단하게 원하는 로직이 구현되는데builder 패턴이다 보니 아래 처럼 구현을 하고 있습니다.MemberEntity originMember = memberRepository.findById(memberId);MemberEntity memberForUpdate = MemberEntity.builder().id(originMember.getId()).address(originMember.getAddress()).isActive(true)...........build();memberRepository.save(memberForUpdate );이런 경우에 Builder패턴을 사용하면서 좋은 해결책이 있을까요? 상태와 관련된 필드만 @Setter를 넣자니(제 짧은 생각이지만 changeStatus method로 필드값 변경하는 방법도 setter와 동일해보입니다. 오히려@Setter가 코드간결성에서 더 좋아보이는 제 생각입니다.)해당 필드도 무분별하게 변경이 되면 안되는 중요한필드라 애매한 상황입니다. 도와주세요 !
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
1차 캐시의 범위에 대한 질문
https://www.inflearn.com/questions/264414https://www.inflearn.com/questions/659914위에 있는 유사한 내용의 질문에 각각 상반되는 답변이 적혀있어 이를 확실하게 알고 싶어서 질문드립니다.위의 질문을 내용을 보면,영속성 컨텍스트(StatefulPersistenceContext) 내부에 프록시 객체를 저장하는 MAP과 실제 엔티티 객체를 저장하는 MAP이 따로 존재하는 것으로 보입니다.강의에서 영한님이 1차 캐시라고 말씀 하신 내용은 저 두 개의 MAP중 엔티티 객체를 저장하는 MAP이라고 이해를 하면 될까요?아니면, 1차 캐시라고 말씀하신 내용에 두개의 MAP 모두 포함하는 의미로 생각하면 될까요? + 만약 getReference() 함수를 통해 갖고온 프록시 객체를 초기화하지 않은 상태로 detach()를 이용해 준영속상태로 만들게 된다면, 해당 프록시 객체는 더이상 영속성 컨텍스트의 도움을 받을 수 없기때문에, 초기화가 불가능하다고 이해했는데요.이 때 이 프록시 객체는 위에 프록시 객체를 저장하는 MAP으로부터 제거가 된 것을 detach() 되었다고 생각해도 될까요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
에러 발생합니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 검색해봤는데, 찾는 내용을 못찾아서 질문드립니다. 괜히 늦은시간에 질문올려 알람 때문에 깨시는건 아닐지. 만약에 그렇다면 죄송하단 말씀 먼저 전합니다!아래에 스크린샷 첨부하겠습니다.강의에서는 자동완성도 뜨는데, 제 경우에는 안떠서요..! 맞게 입력한거 같긴한데, 저 빨간색으로 뜨는 원인을 알 수 있을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
안녕하세요 변경감지 질문있습니다.
안녕하세요... 변경감지 질문드립니다.지금은 entity만 사용하고있는데 계층간에서는 dto를 사용하는 걸로알고있습니다.그럴경우 엔티티에 있는 updateXxxx메소드를 dto에 옮겨야하나요? 만약 옮긴다면 변경감지가 안되는데 그럴경우 어떻게해야하는지...save를 콜해야하는지..updateXxxx정도는 엔티티에 있어도 되는지 궁금합니다
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
연관관계 매서드 add 쓰는 이유??..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.연관 관계 매서드에서public void setMember(Member member){ this.member = member; member.getOrders().add(this); } 이런식으로 member의 add함수를 쓰던데 member 객체는 리스트 타이 아닌데 어떻게 가능한거죠???