JPA의 데이터 타입
- 엔티티 타입: @Entity로 정의하는 객체, 식별자를 통해 추적 가능
- 값 타입: int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체, 식별자가 없고 추적 불가
- 기본값 타입
- 자바 기본 타입(int, double)
- 래퍼 클래스(Integer)
- String
- 임베디드 타입(복합 값 타입)
- 컬렉션 값 타입
임베디드 타입: 새로운 값 타입을 직접 정의한 것 ➡️ 값 타입
- 동일성 비교: 인스턴스의 참조 값 비교, == 사용
- 동등성 비교: 인스턴스의 값을 비교, equals() 사용
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Embedded
private Address homeAddress;
@ElementCollection
@CollectionTable(name = "FAVORITE_FOODS",
joinColumns = @JoinColumn(name = "MEMBER_ID"))
@Column(name = "FOOD_NAME")
private Set<String> favoriteFoods = new HashSet<String>();
@ElementCollection
@CollectionTable(name = "ADDRESS",
joinColumns = @JoinColumn(name = "MEMBER_ID"))
private List<Address> addressHistory = new ArrayList<Address>();
// ...
}
@Embeddable
public class Address {
@Column
private String city;
private String street;
private String zipcode;
//...
}
@Entity
public class AddressEntity {
@Id
@GeneratedValue
private Long id;
@Embedded Address address;
...
}