JPA Несколько отношений в одном поле в сущности

Я новичок в использовании JPA 2.0 и баз данных в целом, и меня просто смутили несколько концепций. Итак, у меня есть в общей сложности 3 таблицы. Одним из них является UserTable, который содержит всю информацию о моем пользователе. Он имеет поле первичного ключа, называемое user_Id. Мои другие две таблицы — ExercisesTable и FoodIntakeTable, и каждая из них имеет поле внешнего ключа с именем user_Id для ссылки на user_Id в моей таблице UserTable. Мне нужна связь «один ко многим» из моей таблицы user_Id с каждой из двух таблиц, чтобы я мог найти информацию об упражнениях или информацию о еде для пользователя.

Примерно так: FoodIntakeTable ‹-> UserTable ‹-> ExercisesTable

Мне нужно двунаправленное сопоставление из UserTable в FoodIntakeTable, а также двунаправленное сопоставление из UserTable в ExercisesTable из поля user_Id.

Проблема в том, что когда я пытаюсь написать свой код в своем классе Usertable:

@OneToMany(mappedBy="ExercisesTable.userId")
@OneToMany(mappedBy="FoodIntakeTable.userId")
public long userId;

Это незаконно, потому что я не могу иметь две аннотации @OneToMany в одном и том же поле. Я думаю, что это должно быть законным в обычной реляционной базе данных, и я просто не понимаю, как вы переводите это в JPA. Я очень плохо знаком со всей концепцией баз данных и сущностей в целом, поэтому буду признателен за любую помощь.


person user2676396    schedule 12.08.2013    source источник


Ответы (1)


В JPA вы можете напрямую ссылаться на объекты сущностей вместо идентификаторов, с которыми они сопоставляются. Попробуйте что-то вроде этого:

  1. У вас должен быть тип объекта для каждой из ваших таблиц, скажем, Exercise для ExercisesTable, FoodIntake для FoodIntakeTable и User для вашей UserTable.
  2. Тогда ваша сущность User является владеющей стороной отношений, имея по одному полю на отношение следующим образом:

    @OneToMany(mappedBy=...)
    private List<Exercise> exercises;
    @OneToMany(mappedBy=...)
    private List<FoodIntake> foodIntakes;
    
person rdcrng    schedule 13.08.2013
comment
Спасибо, это очень помогает. :) - person user2676396; 27.08.2013