2014-11-26 2 views
0

나는 다음과 같은 기업이 있다고 가정 :JPA 엔티티를 둘로 나눕니까?

나는 나라, 거리, 도시 및 우편 번호 변수를 개최한다 주소라는 새로운 클래스를 생성 할
@Entity 
@Table (name = "customers) 
public class CustomerImpl implements Customer { 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "id", nullable = false, unique = true) 
private Long id; 

@Column(name = "name", nullable = false) 
private String name; 

@Column(name = "surname", nullable = false) 
private String surname; 

@Column(name = "country", nullable = false) 
private String country; 

@Column(name = "city", nullable = false) 
private String city; 

@Column(name = "street", nullable = false) 
private String street; 

@Column(name = "zipCode", nullable = false) 
private String zipCode; 

// constructor + getters 

} 

. 개요 변수는 Address 객체로 대체되어 코드를보다 읽기 쉽고 깔끔하게 만듭니다.

필자의 경우 Address 클래스를 임베드해야합니까? 아니면 새 엔터티로 할당하고 주소와 고객간에 @OneToOne 관계를 부여해야합니까?

+0

이 호에 따라 달라집니다 w 데이터를 데이터베이스에 저장합니다. 'ADDRESSES' 테이블을 가지고 계시거나 각 테이블의 컬럼은'COUNTRY','CITY','STREET' 그리고'ZIPCODE'입니까? –

+0

'주소'테이블이 없지만 JPA가 테이블을 생성한다고 생각합니까? – Bravo

+1

귀하의 디자인에 따라 다릅니다. 당신은 JPA가 당신을 위해 테이블을 생성하도록 할 수 있습니다. (이것은 통합 테스트 목적으로 만 좋은 접근법이라고 생각합니다.) 기존의 데이터베이스 모델에서 작업합니다. (더 견고한 접근 방법이며 당신이 직접 촬영할 수는 없습니다. 피트). –

답변

1

더 읽기 코드를 확인하려면 청정 당신이 ... 국가, 도시를 포함하는 ADRESSE 테이블을 만들어야합니다 감사합니다, 그리고 당신은이 같은 @OneToOne 관계 사용할 수 있습니다

에서을 고객 클래스 다음 ADRESSE 클래스에서

@OneToOne(mappedBy = "customer", fetch = FetchType.LAZY) 
private Address address; 
// Getter + Setter 

는 :

@OneToOne 
@JoinColumn(name="id") 
private Customer customer; 
+0

OP에 'ADDRESS' 테이블이 있으면 작동합니다. 그렇지 않은 경우에는 @ Embeddable을 사용하는 것이 좋습니다. –

+0

@Luiggi Mendoza 맞아요. – Anarki

+0

JPA 엔진이 테이블을 생성하지 않았습니까? – Bravo

관련 문제