Ограничения в Embeddable внутри ElementCollection игнорируются для DDL
Учитывая эти классы (в Java):
@Entity
public class Parent {
@Id
public UUID id = UUID.randomUUID();
@ElementCollection
public Set<Child> children;
}
@Embeddable
public class Child {
@NotNull
@Length(max = 20)
public String s;
}
Я ожидаю, что Hibernate автоматически сгенерирует следующую таблицу для Child
учебный класс:
CREATE TABLE public.parent_children
(
parent_id uuid NOT NULL,
children_s character varying(20) COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT ...
)
Но он игнорирует ограничения в Embeddable и генерирует:
CREATE TABLE public.parent_children
(
parent_id uuid NOT NULL,
children_s character varying(255) COLLATE pg_catalog."default",
CONSTRAINT ...
)
1) Что я могу сделать, чтобы решить эту проблему (все еще используя функцию auto-dll Hibernate)?
2) Как связанный вопрос, что я могу сделать, чтобы Hibernate не добавил префикс children_
к именам столбцов? Я знаю, что могу сделать:
@AttributeOverrides({
@AttributeOverride(name="s", column=@Column(name="s"))
})
public Set<Child> children;
Но это кажется мне безобразным.
- Spring Boot 2.0.5
- Hibernate Core 5.2.17
1 ответ
Я догадываюсь @NotNull
а также @Length
являются javax.validation.constraints
это только для проверки.
Ваш @Embeddable
должен выглядеть так
@Embeddable
public class Child {
@Column(name="s", nullable=false)
public String s;
}