Ассоциация OneToMany с использованием внешнего ключа в объекте OWNED - PullRequest
2 голосов
/ 26 марта 2012

Я пытаюсь создать связь OneToMany между объектом разговора и объектом SMS.

Я хочу, чтобы внешний ключ был на столе разговоров.

Table_Conversation

- id BIGINT
- sms_id BIGINT FK REFERENCES SmsBean.id

Вот класс разговора

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 ]

2 голосов
/ 31 марта 2012

Этот вопрос, который мой, неверен.

Я хочу, чтобы внешний ключ был на столе разговоров.

Table_Conversation

- id BIGINT
- sms_id BIGINT FK REFERENCES SmsBean.id

Но что произойдет, если один и тот же разговор (id = 123) будет иметь два смс? Это приведет к двум строкам с одинаковым идентификатором.

Table_Conversation

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

Поэтому я отказался от этой идеи, и теперь я использую таблицу соединений, так как это рекомендуемый способ гибернации.

0 голосов
/ 26 марта 2012

Попробуйте это:

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

Это создаст таблицу Conversation_Sms, которая будет содержать отношения. Если вы добавили поле беседы в сущность Sms и добавили атрибут mappedBy в аннотацию OneToMany, эта таблица не была бы создана .. Но, как вы сказали, это не то, что вам нужно ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...