Соотнесение атрибутов таблицы БД и параметров объектов

Работаю над созданием веб-приложения на 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 шт):

Автор решения: kio

Если я правильно понял ваш вопрос, то вам необходимо посмотреть про маппинг таблиц с моделью. Маппинг в 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;
    
    //.....
}
→ Ссылка