Отображение из класса в таблицу выполняется с помощью hibernate.Так как таблица реляционной базы данных и объект Java несколько разные, для сопоставления ORM существуют разные стратегии отображения между ними.
Hibernate может использовать следующие стратегии:
- MappedSuperclass
- Одиночная таблица (по умолчанию)
- Объединенная таблица
- Таблица для класса
Подробнее о них можно прочитать в официальной документации .
У них разные плюсы и минусы, и обычно безопаснее всего использовать значение по умолчанию.Однако в стратегии по умолчанию используется только одна таблица, поэтому вам нужно переключиться на другую стратегию.
Таблица для каждого класса создаст три таблицы.Вы также можете проверить примеры для MappedSuperclass и Joined Table, которые также будут использовать несколько таблиц.
Из официальной документации:
@Entity(name = "Account")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public static class Account {
@Id
private Long id;
private String owner;
private BigDecimal balance;
private BigDecimal interestRate;
//Getters and setters are omitted for brevity
}
@Entity(name = "DebitAccount")
public static class DebitAccount extends Account {
private BigDecimal overdraftFee;
//Getters and setters are omitted for brevity
}
@Entity(name = "CreditAccount")
public static class CreditAccount extends Account {
private BigDecimal creditLimit;
//Getters and setters are omitted for brevity
}
Создает эти таблицы:
CREATE TABLE Account (
id BIGINT NOT NULL ,
balance NUMERIC(19, 2) ,
interestRate NUMERIC(19, 2) ,
owner VARCHAR(255) ,
PRIMARY KEY ( id )
)
CREATE TABLE CreditAccount (
id BIGINT NOT NULL ,
balance NUMERIC(19, 2) ,
interestRate NUMERIC(19, 2) ,
owner VARCHAR(255) ,
creditLimit NUMERIC(19, 2) ,
PRIMARY KEY ( id )
)
CREATE TABLE DebitAccount (
id BIGINT NOT NULL ,
balance NUMERIC(19, 2) ,
interestRate NUMERIC(19, 2) ,
owner VARCHAR(255) ,
overdraftFee NUMERIC(19, 2) ,
PRIMARY KEY ( id )
)