在嵌入式约束的ElementCollection内被忽略DDL

问题描述 投票:0回答:1

考虑到这些类(在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;
}

我希望休眠自动生成的Child类如下表:

CREATE TABLE public.parent_children
(
    parent_id uuid NOT NULL,
    children_s character varying(20) COLLATE pg_catalog."default" NOT NULL,
    CONSTRAINT ...
)

但是,它忽略了约束的嵌入并产生:

CREATE TABLE public.parent_children
(
    parent_id uuid NOT NULL,
    children_s character varying(255) COLLATE pg_catalog."default",
    CONSTRAINT ...
)

1)我能做些什么来解决这个问题(仍在使用Hibernate的自动DLL功能)?

2)作为一个相关的问题,我能做些什么,因为Hibernate没有前缀children_添加到列名?我知道我可以这样做:

@AttributeOverrides({
    @AttributeOverride(name="s", column=@Column(name="s"))
})
public Set<Child> children;

但是,这似乎很丑陋的我。


  • 春天引导2.0.5
  • Hibernate的核心5.2.17
hibernate hibernate-mapping
1个回答
2
投票

即时猜测@NotNull@Lengthjavax.validation.constraints,那些仅用于验证。

@Embeddable应该是这样的

@Embeddable
public class Child {

    @Column(name="s", nullable=false)
    public String s;
}
© www.soinside.com 2019 - 2024. All rights reserved.