JPA OneToMany двунаправленный без таблицы соединений

1

В настоящее время я разрабатываю приложение java ee, но у меня проблемы с JPA. У меня есть два объекта:

@Entitiy
public class Restaurant implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Desk> desks;
}

@Entitiy
public class Desk implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @ManyToOne
    @JoinColumn(name = "restaurant_id")
    private Restaurant restaurant;
}

И я храню столы со следующим кодом:

Desk desk = new Desk();
desk.setNumber(Integer.toString(x));
desk.setRestaurant(restaurant);
em.persist(desk);

Но теперь странно, что список столов в ресторане сущности пуст, но стоимость ресторана на столе лица правильная. База данных shema выглядит так:

RESTAURANT (ID)
DESK (ID, RESTAURANT_ID)
RESTAURANT_DESK (RESTAURANT_ID, DESK_ID)

Таблица RESTAURANT_DESK всегда пуста. Почему создается эта третья таблица? И почему список столов в суше ресторана пуст?

Теги:
entity-relationship
jpa
bidirectional

2 ответа

1

Для двунаправленного сопоставления вам нужно mappedBy атрибут mappedBy в сущности Restaurant чтобы указать обратное соотношение:

@Entity
public class Restaurant implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="restaurant")
    private List<Desk> desks;
}
  • 0
    Теперь RESTAURANT_DESK не будет создан, но мой список все еще пуст. Является ли способ настаивать на столе неправильно?
  • 0
    О каком списке вы говорите? Можете ли вы показать еще немного кода?
Показать ещё 3 комментария
0

Я нашел проблему. Я должен был добавить стол сущности также в список ресторанов.

Desk desk = new Desk();
desk.setNumber(Integer.toString(x));
desk.setRestaurant(restaurant);
restaurant.getDesks().add(desk);
em.persist(desk);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню