给出这些类(在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;
但这对我来说似乎很丑。
答案 0 :(得分:2)
我猜@NotNull
和@Length
是javax.validation.constraints
,它们仅用于验证。
您的@Embeddable
应该看起来像这样
@Embeddable
public class Child {
@Column(name="s", nullable=false)
public String s;
}