Ограничения в 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;
}
Другие вопросы по тегам