В настоящее время я разрабатываю приложение 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 всегда пуста. Почему создается эта третья таблица? И почему список столов в суше ресторана пуст?
Для двунаправленного сопоставления вам нужно 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;
}
Я нашел проблему. Я должен был добавить стол сущности также в список ресторанов.
Desk desk = new Desk();
desk.setNumber(Integer.toString(x));
desk.setRestaurant(restaurant);
restaurant.getDesks().add(desk);
em.persist(desk);