2010-07-23 2 views
0

Я столкнулся с какой-то странной проблемой, у меня есть таблица пользователей (класс использования) и таблица стран (класс страны). У пользователя может быть N стран. Следовательно, я добавил список стран в классе пользователей с методом getter и setter. В таблице я сделал country_id как внешний ключ в таблице пользователя. И у меня есть @OneToMany в пользовательском классе.@OneToMany не вставляет внешний ключ в Hibernate + JPA

Теперь, когда я пытаюсь сохранить класс User с коллекцией стран в нем, я вижу, что страны никогда не вставлены :(Я установил две страны и вставлял пользователя. Поэтому я должен был бы видеть 2 строки пользователя с разными странами. Но я просто вижу один.

Я просто озадачен. Я делаю что-то здесь не так?

ответ

2

Я думаю, что вы перепутали все вещи

  1. Каждый пользователь может иметь 0 .. * страны, но это "каждая страна может принадлежать только одному пользователю "? Мне это не кажется рациональным. Поэтому я думаю, что это должно быть отношение @ManyToMany вместо @OneToMany.

  2. «В таблице я сделал country_id как внешний ключ в пользовательской таблице». Для @OneToMany внешний ключ не сохраняется в таблице пользователя. Это легко понять: каждая запись пользователя может иметь 1 country_id, как она может представлять отношения «ToMany»? Сохранение внешнего ключа в таблице является поведением по умолчанию для @ManyToOne.

  3. «Я вижу, что страны никогда не вставлены». Автоматически вставляя страны, когда пользователь вставлен, это как-то связано с настройкой каскада. Просто добавьте подходящую настройку каскада, и она должна работать нормально. (Хотя это не звучит очень рационально для меня)

Предложенный способ сделать это:

  1. Have User.countries быть @ManyToMany.

  2. Наличие таблицы user_country с 2 FK, которые являются user_id и country_id, для хранения отношений между пользователями и странами.

Смежные вопросы