묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
OneToOne관계 Insert 질문있습니다..
안녕하세요 JPA를 공부하고 테스트하는과정에서 문제가 생겨 질문드립니다..ㅠㅠ사용자테이블(USER)비밀번호테이블(PASSWORD) 2개가 있고,각각 USER_ID를 키값으로 가지고 있습니다. 사용자 테이블 Entity비밀번호 Entity 회원가입 사용자정보(userInfo)를 입력하면 비밀번호(userPwd) 테이블에도 같이 insert되게 하고싶습니다. 여기서 문제가 생기는데 Setter함수를 되도록이면 쓰지말라고해서 생성자 초기화를 이용하여 테스트중인데생성자를 만드는과정에서 어떻게 생성을 해야될지 모르겠습니다..userInfo 생성자에 userPwd를 넣는게 맞는건지... 예상되는 insertUserInfo테이블 admin, 기타정보들UserPwd테이블 admin, 1234 아시는분있으면 도움좀 부탁드리겠습니다..ㅠㅠ감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JPA 일대일 식별관계
일대일 식별관계에서 매핑 설정 질문입니다. 강의 보면서 Entity를 설계해서 만들고 있는 중, 궁금한 점이 생겨 질문드립니다. 예를 들어 Board와 BoardDetail이라는 두 테이블이 있을 때, BoardDetail 테이블의 PK값(FK)으로 Board의 테이블의 PK(board_id)만 사용한다고 가정해보면, (이렇게 설계한 이유는 기본정보와 디테일정보를 컨셉적으로 다르게 두어 사용하고 싶었습니다.) 당연히 BoardDetail에서만 @Id @OneToOne과 @JoinColumn(name = "board_id") 이런 설정을 하면 될 줄 알았는데, "Composite-id class must implement Serializable"와 같은 에러가 떴습니다. 개념적으로 일대일 식별관계이기 때문에 문제가 되는 것 같아 해결법을 찾아봤는데, 개념적으로는 단방향이지만 @MapsId를 통해 양방향 매핑처럼 사용을 하는 방법이 있었습니다. (참고: https://steady-coding.tistory.com/539) 1. JPA에서는 이러한 기능(일대일 식별관계)을 기본적으로 제공해주지 않는 건가요? 2. 그렇다면 이러한 방식으로는 실제 개발에 사용되지 않나요? (.. 그렇다면 Board라는 테이블에 디테일한 정보들 모두 저장해야 하는 문제가 있을 것 같습니다.) 3. 테이블을 물리적으로 나누는 것(Board, BoardDetail)이 문제가 될까요? 특히, JPA 개발에서 문제가 될 부분이 있을까요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
OneToOne 연관관계 주인아닌 테이블에서 LAZY 로딩 관련 질문
[질문 내용]안녕하세요! 강의 들으면서 열심히 배우고 있습니다! 이번에 질문드리는 부분은 저번 강의의 프록시의 한계(?)와 관련된 질문입니다. OneToOne 관계에서 연관관계 주인이 아닌 테이블에서 LAZY로딩을 하더라도 프록시의 한계로 인해 쿼리가 두번나가는 것을 배웠었습니다. 거의 모든 경우에 대해 LAZY를 설정하는데, 이렇게 OneToOne 연관관계주인이 아닌 테이블에서는 LAZY를 설정하는게 오히려 성능 하락을 불러일으킬것 같다는 생각이 들어서 질문드립니다. 실제 이번 강의에서 Delivery 엔티티에서 Order를 LAZY 로딩 적용해주셨는데 임시로 DeliveryStatus는 주석처리 해놓고 Delivery를 em.find 로 조회해보면 쿼리가 두번 나가는 것을 확인했습니다.(저번 강의에서 말씀해주신 프록시의 한계) 그래서 아직 짧은 제 식견으로는 이런 경우엔 EAGER를 하는게 오히려 성능상 좋지 않을까? 라는 생각을 했는데요. 실무적인 관점에서 어떤식으로 푸시는지 궁금합니다! 감사합니다. 명아주 드림
-
미해결
JPA 1:1 연관관계 설정
안녕하세요 양방향 1:1 연관관계 관련되서 이해가 잘 되지않아 문의드립니다! 부모 entity, 자식 entity가 무조건 1:1 관계인 경우 자식은 없을 수 도 있지만 부모는 항상 존재해야함으로 부모 entity가 주최가 되는게 맞는걸로 알고있는데 자식이 존재하는 경우 데이터 등록 시 부모 테이블에만 등록이 되는데 엔티티 설정이 잘못된 부분이 어디인지 잘 모르겠습니다.. ㅠㅠ @Getter @Setter @NoArgsConstructor(access = AccessLevel.PUBLIC) @Entity @Table(name = "TB_MANAGER") @DynamicInsert @DynamicUpdate @JsonInclude(JsonInclude.Include.NON_EMPTY) public class Manager { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "MANAGER_KEY") @ApiModelProperty(value = "관리자 시퀀스", hidden = true, name = "managerKey") private Long managerKey; @Column(name = "MANAGER_ID") @ApiModelProperty(value = "관리자 아이디", name = "managerId") private String managerId; @Column(name = "PASSWORD") @ApiModelProperty(value = "비밀번호", name = "password") @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private String password; @Column(name = "NAME") @ApiModelProperty(value = "이름", name = "name") private String name; @OneToOne(fetch = FetchType.EAGER) @JoinColumn(name = "MANAGER_KEY") private ManagerSub managerSub; } @Getter @NoArgsConstructor(access = AccessLevel.PUBLIC) @Entity @Table(name = "TB_MANAGER_SUB") @DynamicInsert @DynamicUpdate @JsonInclude(JsonInclude.Include.NON_EMPTY) public class ManagerSub { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "MANAGER_SUB_KEY") @ApiModelProperty(value = "zzz", hidden = true, name = "managerSubKey") private Long managerSubKey; @Column(name = "MANAGER_KEY") private Long managerKey; @Column(name = "COUNT") @ApiModelProperty(value = "수", name = "count") private Long count; @Column(name = "PHONE") @ApiModelProperty(value = " 전화번호", name = "phone") private String phone; @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "MANAGER_KEY", insertable = false, updatable = false) private Manager manager; }
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일대일 관계에서 mappedBy를 지정하지 않으면 어떻게 되나요?
제가 이해가 부족해서 OneToOne 관계에서 서로 단방향?을 걸어버린 구조가 있는데요. 실제 구조로 보면 이렇게 돼있습니다. 실제론 FK를 사용하지 않아서 FK가 걸려있진 않습니다. 구조만 서로 Id를 DB에서 갖고 있습니다. 코드는 서로 @OneToOne에 @JoinColumn을 걸었습니다. Member와 Locker 둘다요. 이렇게 되면 발생할 수 있는 문제가 어떤게 있을까요..? 그리고 이렇게 하면 양방향에서 EAGER만 되는걸 해결할 수 있는지도 궁금합니다.