#hibernate #jpa #jboss #quarkus
Вопрос:
У меня включена генерация схемы в приложении.свойства.
quarkus.hibernate-orm.database.generation.create-schemas=true
quarkus.hibernate-orm.database.generation=update
Поэтому, когда я загружаю приложение и hibernate пытается сгенерировать таблицы, я получаю эту ошибку:
GenerationTarget encountered exception accepting command :
Error executing DDL "alter table line add constraint FKplr0g1vlmngsgvsj9eskryujs foreign key (id) references task (taskId)"
via JDBC Statement: org.hibernate.tool.schema.spi.CommandAcceptanceException:
Error executing DDL "alter table line add constraint FKplr0g1vlmngsgvsj9eskryujs foreign key (id) references task (taskId)"
Это проблема при использовании аннотации @ColumnDefault с пользовательским перечислением TaskStatus
. Вот что у меня есть:
public class Task {
@Id
@GeneratedValue(generator = "id-generator")
@Type(type = "uuid-char")
@Column
private UUID taskId;
@Enumerated(EnumType.STRING)
@Column
@ColumnDefault("INCOMPLETE")
private TaskStatus status;
...
}
Кто-нибудь знает, почему Hibernate не может создать ограничение по умолчанию для этого столбца?
Обновить:
Если я инициализирую поле сущности, проблема в том, что оно будет иметь значение по умолчанию только для этого приложения, а не для любых других приложений, которые вызывают базу данных. В то время как если я полагаюсь на определение столбца для предоставления значения по умолчанию, Hibernate, похоже, передает значение null и перезаписывает значение по умолчанию. На данный момент я решаю эту проблему, используя комбинацию обоих решений:
@Enumerated(EnumType.STRING)
@Column(columnDefinition = "enum('INCOMPLETE','QUEUE','ACTIVE','COMPLETE') default 'INCOMPLETE' not null")
private TaskStatus status = TaskStatus.INCOMPLETE;
Если кто-нибудь может объяснить такое поведение, мне очень интересно.
Комментарии:
1. У меня сложилось впечатление , что вы должны избегать значения
@ColumnDefault
, как если бы оно дословно использовалось в сгенерированном операторе SQL. Итак, еслиINCOMPLETE
это имя одного из значенийTaskStatus
перечисления (я думаю), укажите что-то вроде@ColumnDefault("'INCOMPLETE'")
.2. Не повезло, ничего не вышло.