2014-03-29 2 views
1

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

@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); 

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

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

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

ответ

1

Для двунаправленного отображения, вы должны дать 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 не будет создан, но мой список по-прежнему пуст. Неправильно ли это удается? – perotom

+0

В каком списке вы говорите? Можете ли вы показать еще какой-нибудь код? –

+1

Думаю, вы должны установить обе стороны отношений. JPA знает только о собственной стороне отношений. 'Список ' на самом деле не существует в базе данных, он скорее сопоставляется с «рестораном» в таблице «Стол». –

0

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

Desk desk = new Desk(); 
desk.setNumber(Integer.toString(x)); 
desk.setRestaurant(restaurant); 
restaurant.getDesks().add(desk); 
em.persist(desk); 
Смежные вопросы