OneToMany关联在OWNED实体中使用外键

时间:2012-03-25 20:50:53

标签: hibernate

我正在尝试在会话实体和短信实体之间建立一个OneToMany关联。

我希望外键在对话桌上。

Table_Conversation

- id BIGINT
- sms_id BIGINT FK REFERENCES SmsBean.id

这是Conversation类

public class Conversation{
  //...
  @OneToMany(targetEntity=SmsBean.class, table="conversation")
  public List getSmsList() {
    return smsList;
  }
}

请注意,我不想在Sms类中使用会话字段,因为我不需要它。

Hibernate无法生成我的表并抛出以下异常:

org.hibernate.cfg.NotYetImplementedException: Collections having FK in secondary table

我正在使用Hibernate 3.5 / JPA2.0

你能帮忙弄清楚如何做到这一点。

由于

2 个答案:

答案 0 :(得分:2)

这是我的问题,是不正确的。

我希望外键在对话桌上。

Table_Conversation

- id BIGINT
- sms_id BIGINT FK REFERENCES SmsBean.id

但是当同一个对话(id = 123)有两个短信时会发生什么?这将导致两行具有相同的ID。

Table_Conversation

|--------------|
| id  | sms_id |
|--------------|
| 123 |  1001  |
| 123 |  1002  |
|--------------|

所以我放弃了这个想法,现在我正在使用连接表,因为这是hibernate推荐的方式。

答案 1 :(得分:0)

试试这个:

public class Conversation{
  //...
  @OneToMany
  public List<Sms> getSmsList() {
    return smsList;
  }
}

这将创建一个表Conversation_Sms,它将保存关系。 如果你在Sms实体中添加了一个Conversation字段并将一个mappedBy属性添加到OneToMany注释中,那么这个表就不会被创建..但是就像你说的那样,这不是你想要的......