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);
컬럼에 null을 입력할 수 없다는데.. 입력해도 테스트를 통과해요 제가 어떤부분을 잘못알고있는건가요?
같은값을 중복해서 저장할 수 없다는데 2번째 3번째 줄을 보면 잘 저장하고 있지 않나요..?
답변 3
0
강의에서 설명하듯, 현재 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;
}