Ограничения в Embeddable внутри ElementCollection игнорируются для DDL - PullRequest
0 голосов
/ 07 февраля 2019

Учитывая эти классы (в 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 Ответ

0 голосов
/ 07 февраля 2019

Я предполагаю, @NotNull и @Length равны javax.validation.constraints, это только для проверки.

Ваш @Embeddable должен выглядеть следующим образом

@Embeddable
public class Child {

    @Column(name="s", nullable=false)
    public String s;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...