Представляется неправильным представление об использовании аннотации @OneToMany
. Аннотация @OneToMany
используется для представления стороны 1 в отношении 1: M, а обратное отношение @ManyToOne
используется для представления стороны M. Следовательно, аннотация @OneToMany
должна быть определена для типа коллекции в сущности, а не для обычного ссылочного типа.
Поэтому вы должны:
- используйте ассоциацию
@OneToOne
, если такова природа отношений между сущностями.
- или решите, какой объект представляет 1-сторону в отношении 1: M. Исходя из использования класса
LinkedList
в Restaurants
, я бы считал класс Restaurants
односторонним и использовал аннотацию @OneToMany
в классе Restaurants
, а обратный @ManyToOne
отношения в классе Menus
. Уточненный код будет:
Restaurants.java
...
@OneToMany(mappedBy="restaurant")
private List<Menus> menus = new LinkedList<Menus>();
Menus.java
@ManyToOne
@JoinColumn(name="restaurant")
private Restaurants restaurant;
Обратите внимание на изменение в объявлении переменной-члена menus
с LinkedList<Menus>
до List<Menus>
. По-видимому, в этом случае разумнее объявить любую коллекцию с типом интерфейса коллекции, а не с конкретным классом коллекции. Обоснование заключается в том, что основной поставщик JPA будет использовать свои конкретные типы коллекций во время выполнения с целью передачи значений коллекции. Например, Hibernate будет использовать PeristentList
во время выполнения для представления списка в управляемом объекте, а не LinkedList
, созданный объектом. Если вы используете конкретный тип, Hibernate может не отображаться в столбце или может не получить соответствующие записи из базы данных; Я не уверен в особенностях поведения во время выполнения, за исключением того, что я знаю о возможном сбое.