У меня есть абстрактный суперкласс, каждый объект которого в моем домене является его подклассом.
Используя генерацию схемы БД, я хочу создать индекс для каждого объекта на поле в суперклассе и без него. использование аннотации таблицы для каждого подкласса.
Мой суперкласс
@MappedSuperclass
public abstract class BaseEntity {
@Id
@GeneratedValue(strategy = SEQUENCE)
private Long surrogateId;
@Index(name="id_index") // Every subclass should inherit this index, with its own name
@Column(unique = true, updatable = false, nullable = false)
private UUID id = UUID.randomUUID();
Пример подкласса
@Entity
public class Customer extends BaseEntity {
...
}
Я пробовал до сих пор:
использует аннотацию Table с @Index на суперклассе, но Hibernate, похоже, не использует эту аннотацию, если она не помечена @Entity. Например, @Table(indexes = {@Index(name="index_id", columnList = "id")})
Нет SQL операторов.
использовать аннотацию устарел @ Index с именем "id_index", но создается только один индекс при запуске (БД выдает ошибку, что этот индекс уже существует для других объектов). Некоторые сгенерированные SQL заявления:
Hibernate: create index id_index on "customer" ("id")
Hibernate: create index id_index on "user" ("id")
2020-02-15 17:47:26,620 WARN o.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl - GenerationTarget encountered exception accepting command : Error executing DDL "create index id_index on "customer" ("id")" via JDBC Statement
org.postgresql.util.PSQLException: ERROR: relation "id_index" already exists
Есть идеи, как это сделать без слишком большого дублирования кода?
Спасибо