У вас может быть абстрактный класс, в котором вы определите все свои общие поля, аннотированные именами столбцов, и добавьте к нему 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...
}