Имея 2 классов сущностей для двух различных таблиц базы данных, Table1.java
, который имеет идентификаторы вручную генерироваться и Table2.java
что последовательность генерируемых идентификаторов, можно переместить свойство Ид, @Id
и @Column
аннотаций, и геттеры & сеттеры для id для универсального суперкласса и оставляют @GeneratedValue
и @SequenceGenerator
внутри подклассов, которые им нужны? Решение должно быть масштабируемо для сотен таблиц двух типов и не должно разделять суперкласс класса GenericTable в двух классах.Hibernate реорганизовать @Id поля в суперкласс
Проблема заключается в том, что @GeneratedValue
работает только на уровне поля/методы, поэтому он должен быть перемещен в суперкласс делает все подклассы обязательных для реализации @SequenceGenerator
, который конфликтует с Table1.java
характеристиками.
@Entity
@Table(name = "TABLE1")
public class Table1 extends GenericTable {
@Id
@Column(name = "ID", nullable = false, precision = 22, scale = 0)
private Long id;
// other properties
// getters & setters for id
// other getters & setters
}
@Entity
@Table(name = "TABLE2")
public class Table2 extends GenericTable {
@Id
@GeneratedValue(strategy = SEQUENCE, generator = "generator")
@SequenceGenerator(name = "generator", sequenceName = "TABLE2_SEQ", allocationSize = 1)
@Column(name = "ID", nullable = false, precision = 22, scale = 0)
private Long id;
// other properties
// getters & setters for id
// other getters & setters
}
@MappedSuperclass
public abstract class GenericTable {
}
У меня есть еще 2 вопроса для вас: 1. Если бы у вас было бы больше таблиц, например Table2, но с другим именем последовательности, как бы вы изменили свой пример. 2. Если у вас будет больше суперклассов, таких как Dictionary (есть метки и свойства статуса), аудита (имеет больше столбцов) и т. Д., Вы в конечном итоге дублируете каждый абстрактный тип для каждого типа, поддерживающего последовательность и не поддерживающие последовательность. Как бы вы реорганизовали этот случай? – pXel