我正在尝试在会话实体和短信实体之间建立一个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
你能帮忙弄清楚如何做到这一点。
由于
答案 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注释中,那么这个表就不会被创建..但是就像你说的那样,这不是你想要的......