Spring Boot JPA, если у меня есть несколько таблиц с одинаковым именем столбца, могу ли я поместить в один и тот же класс сущностей? - PullRequest
0 голосов
/ 12 октября 2018

Я использую как предложение в моем пользовательском операторе SQL, а в классе сущности я использую имя из предложения as.Каков наилучший способ иметь несколько таблиц с одинаковыми именами столбцов.отдельные классы сущностей?

Ответы [ 2 ]

0 голосов
/ 09 марта 2019

Аннотация к нескольким таблицам для одного объекта

В библиотеке javax.persistence.* имеется примечание @SecondaryTable, которое можно применять к объекту, который можно использовать для сопоставления одного объекта нескольким таблицам, имеющим общие столбцы.Однако вам необходимо включить аннотацию @Column над всеми переменными-членами, которые применяются к вторичной таблице.Ниже приведен пример

Пример сущности

@Entity
@Table(name = "dealers")
@SecondaryTable(name = "dealers_tmp")
public class Dealer {

    @Id
    @Column(name = "id", table="dealers_tmp")
    private long id;

    @Column(name = "account", table="dealers_tmp")
    private String account;

    @Column(name = "name", table="dealers_tmp")
    private String name;
}

В приведенном выше примере условно первая таблица (дилеры) уже применяется ко всем столбцам без аннотации.Однако вам необходимо включить table="<secondary>" во все переменные приложения.

0 голосов
/ 12 октября 2018

У вас может быть абстрактный класс, в котором вы определите все свои общие поля, аннотированные именами столбцов, и добавьте к нему MappedSuperclass .

Затем для каждой отдельной таблицы, которая разделяетс теми же именами столбцов, вы создаете новый класс, который расширяет абстрактный класс и аннотирует его именем таблицы.

Таким образом, вам не придется повторять определения общих столбцов, которые у них общие.

@MappedSuperclass
abstract class Person {
    // Common columns

    @Id
    @Column(name = "ID")
    private Long id;

    @Column(name = "AGE")
    private Integer age;

    // getters, setters, hashCode, equals...
}

@Entity
class Employee extends Person {
    // This entity will include 'ID' and 'AGE' columns from 'Person'

    @Column(name = "SALARY")
    private BigDecimal salary;

    // getters, setters, hashCode, equals...
}

@Entity
class Student extends Person {
    // This entity will include 'ID' and 'AGE' columns from 'Person'

    @Column(name = "FIELD")
    private String field;

    // getters, setters, hashCode, equals...
}
...