2014-11-26 3 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, чтобы сделать код более понятным и понятным.

В моем случае, должен ли быть внедрен класс класса, или я должен назначить его как новый объект и дать отношения @OneToOne между адресом и клиентом?

Спасибо

+0

Это зависит от хо w вы будете хранить данные в своей базе данных. У вас есть таблица «АДРЕСА», или каждая таблица имеет столбцы «СТРАНА», «ГОРОД», «УЛИЦА» и «ZIPCODE»? –

+0

У меня нет таблицы адресов, но я думал, что JPA генерирует таблицы, не так ли? – Bravo

+1

Это зависит от вашего дизайна. Вы можете позволить JPA генерировать таблицы для вас (что, по моему мнению, является хорошим подходом только для целей интеграционного тестирования) или работать с существующей моделью базы данных (которая, по моему мнению, является более надежным подходом и не позволяет вам делать снимки самостоятельно ноги). –

ответ

1

Чтобы сделать код более читаемым и очистителя вы должны создать таблицу, которая содержит ADRESSE страну, город ..., а затем вы можете использовать отношения @OneToOne вроде этого:

В класс Customer:

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

В классе Adresse:

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

Это будет работать, если OP имеет таблицу «ADDRESS». Если это не так, было бы лучше использовать '@ Embeddable'. –

+0

@Luiggi Mendoza То есть – Anarki

+0

Не является ли двигатель JPA порождением таблиц? – Bravo

Смежные вопросы