【发布时间】:2011-06-25 00:30:05
【问题描述】:
我有一个让我有点困扰的问题。
当我在我的实体休眠 (3.5) 中使用 @ElementCollection 时,我会生成一个没有任何约束的表。
重要修改
我的实体是另一个类的子类。这可能是hibernate不生成pk和fk的原因。
编辑结束
public MyEntity extends BaseEntity
@ElementCollection(fetch=FetchType.EAGER)
private Set<String> test;
以 (postgres 9) 结尾:
CREATE TABLE myentity_test
(
entityid bigint NOT NULL,
test character varying(255)
)
hibernate 没有设置任何约束,如外键或唯一索引,这是我的错误吗? 我可以手动设置它,但我更愿意正确注释实体以完全休眠(尽可能)创建我的数据库。
最好的问候, 米
PS:我的坏。混淆了我脑海中萦绕的两件事。我的意思是@ElementCollection。
PS:@Column 有助于提供唯一索引。编辑:将名称更正为我的示例。
CREATE TABLE myentity_test
(
entityid bigint NOT NULL,
test character varying(255),
CONSTRAINT itemequipable_test_test_key UNIQUE (test)
)
我希望是这样的(伪代码):
CREATE TABLE myentity_test
(
entityid bigint NOT NULL PRIMARY KEY,
test character varying(255) PRIMARY KEY,
CONSTRAINT fk_entityid references (myentity) on entityid
)
【问题讨论】:
-
您的示例代码没有使用@Enumerated
-
外键是由单独的
ALTER TABLE语句创建的,也许你错过了。 -
但是我相信您只需要一个 @Column 注释,您可以根据需要在其上设置 nullable=false 等。
-
@David:正是如此。应该是一个答案。
-
我在创建后复制了表的定义。 @Column 有帮助,我现在有了独特的约束。 fk 仍然丢失。很抱歉一开始的混乱。 ;-)
标签: hibernate postgresql jpa-2.0