인프런 커뮤니티 질문&답변

김민지님의 프로필 이미지

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

플러시

값 타입 컬렉션의 제약사항

22.10.25 16:51 작성

·

324

0

Address address1 = new Address(null, "2");
Address address2 = new Address("3", "4");
Address address3 = new Address("3", "4");
List<Address> addressList = new ArrayList<>();
addressList.add(address1);
addressList.add(address2);
addressList.add(address3);
Member member = new Member();
member.setAddressList(null);
em.persist(member);
//변경
em.flush();
address1 = new Address("213", "!23");
addressList.remove(0);
addressList.add(address1);
  1. 컬럼에 null을 입력할 수 없다는데.. 입력해도 테스트를 통과해요 제가 어떤부분을 잘못알고있는건가요?

  2. 같은값을 중복해서 저장할 수 없다는데 2번째 3번째 줄을 보면 잘 저장하고 있지 않나요..?

답변 3

0

David님의 프로필 이미지

2022. 11. 04. 15:08

강의에서 설명하듯, 현재 JPA에서 PK를 생성하지 않은 상태입니다.

만약 JPA에서 ElementCollection에 대해 PK를 만들어야 한다면 List 대신 Set을 사용하면 될 것 같습니다.

https://stackoverflow.com/a/33833399/10709777

 null 이 허용되지 않는 것과 중복되지 않아야 하는 건 PK의 제약조건이라서 언급하신 것 같습니다.

 

아래 부분을 참고해주세요.

33분49초 https://www.inflearn.com/course/ORM-JPA-Basic/unit/21716

 

0

김민지님의 프로필 이미지
김민지
질문자

2022. 11. 04. 13:55

package jpaStudy.ex.entity;


import lombok.*;

import javax.persistence.*;
import java.util.List;

@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@NamedQuery(
        name = "Member.findByUsername",
        query = "select m from Member m where m.name = :name"
)
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "MEMBER_ID")
    private Long id;

    @Column
    private String name;

    private Integer age;

    @ElementCollection
    @CollectionTable(name = "Address", joinColumns = @JoinColumn(name = "MEMBER_ID"))
    private List<Address> addressList;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "team_id")
    private Team team;

    @ManyToOne
    @JoinColumn(name = "group1_id")
    private Group1 group1;

    @Embedded
    private Address myAddress;




}

package jpaStudy.ex.entity;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.Embeddable;

@Embeddable
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class Address {
    private String zipCode;
    private String code;
}

0

David님의 프로필 이미지

2022. 10. 27. 21:28

안녕하세요. 김민지님, 공식 서포터즈 David입니다.

해당 코드 외에도 작성하신 코드(예: Address, Member 등)를 함께 올려주시길 요청드립니다.

감사합니다.