考虑到这些类(在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;
但是,这似乎很丑陋的我。
即时猜测@NotNull
和@Length
是javax.validation.constraints
,那些仅用于验证。
你@Embeddable
应该是这样的
@Embeddable
public class Child {
@Column(name="s", nullable=false)
public String s;
}