@OneToMany не вставляет внешний ключ в Hibernate + JPA - PullRequest
0 голосов
/ 23 июля 2010

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

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

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

1 Ответ

2 голосов
/ 23 июля 2010

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

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

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

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

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

  1. Иметь User.countries @ManyToMany.

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

...