【问题标题】:jpa Hibernate @ElementCollectionjpa休眠@ElementCollection
【发布时间】: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


【解决方案1】:

@Column 和 @JoinColum/@OneToMany 注释是处理外键和唯一约束的正确方法,即使使用 @ElementCollection。

在您的特定示例中,不会有外键关系,因为 String(您的 Set 的类型)未映射到另一个实体。

【讨论】:

  • 好地方。是的。如果类型 (xxx) 不明显,则需要 (..., targetEntity= xxx)。虽然很难想象一个等价于 String 的实体。
  • 外键我的意思是从集合表中应该有一个外键返回到 entityid 和一个主键在 entityid 和测试。
  • 我发现当我将继承策略改回 single_table 时,将正确生成集合表。也许 hbm2ddl 有问题。现在工作正常。非常感谢所有帮助者!
猜你喜欢
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 2016-01-19
  • 2013-06-19
  • 1970-01-01
  • 2012-07-21
  • 2021-06-25
相关资源
最近更新 更多