Соотнесение атрибутов таблицы БД и параметров объектов
Работаю над созданием веб-приложения на spring, хранящего информацию в реляционной базе данных.
Если я правильно понимаю логику связывания таблиц в рел-ой БД, то каждый объект (клиент, заказ, товар и т.д.) должны иметь уникальный id, по которому их удобно связать, в упрощенном виде это выглядят так

Правильно ли я понимаю, что атрибуты таблицы в БД и параметра объекта класса в java не обязательно должны совпадать? Т.е. мой класс Order (таблица 1) вполне может иметь поле с типом Customer(объект Customer имеет девять параметров, один из которых id), а вот при "связывании" java-кода с базой данных, в таблицу БД я передаю не всего клиента, а только его id. И еще, подскажите, обязательно ли класс Customer должен иметь параметн id или его может присвоить БД? Не могу понять разграничение функционала между базой и кодом программы.
public class Client {
private static int num = 1;
private final int id;
private String name;
private long tel;
private String comment;
public Client (String name,long tel) {
this.id = num++;
this.name=name;
this.tel=tel;
this.comment=null;
}
public class Ordering {
private static int num = 1;
private final int id;
private Client client;
private String product;
private PriceOrder price;
public Ordering(Client client, String product, int prepayment) {
this.id = num++;
this.client = client;
this.product = product;
this.price = new PriceOrder(prepayment);
}
Ответы (1 шт):
Если я правильно понял ваш вопрос, то вам необходимо посмотреть про маппинг таблиц с моделью. Маппинг в Spring можно выполнить через аннотации, в которых вы можете связать таблицы и поля, и прописать взаимодействие между ними. А потом работать уже непосредственно с объектами модели.
Более детально: Mapping a Single Entity to Multiple Tables in JPA
Пример:
@Table(name = "orders")
public class Orders {
@Id
@Column(name = "order_id")
private Long id;
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "customer_id"
private Customer customer;
//.....
}
@Table(name = "customer")
public class Customer {
@Id
@Column(name = "customer_id")
private Long id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
//.....
}