对于DDL,将忽略ElementCollection内部的Embeddable中的约束

时间:2019-02-06 21:19:04

标签: hibernate hibernate-mapping

给出这些类(在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)我该怎么做才能解决此问题(仍然使用Hibernate的auto-dll功能)?

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 :(得分:2)

我猜@NotNull@Lengthjavax.validation.constraints,它们仅用于验证。

您的@Embeddable应该看起来像这样

@Embeddable
public class Child {

    @Column(name="s", nullable=false)
    public String s;
}