2012-02-28 2 views
2

У меня есть простой проект JPA (с IBM RAD 7.5 на WebSphere 7).простой - JPA @OneToMany генерирует SQL для таблицы, которая не существует

У меня есть Клиент, у которого много ордеров. Похоже, это ...

@Entity 
public class Customer /* in table CC_CUSTOMER */ 
    @Id 
    BigDecimal customerId; 
    @OneToMany(fetch=FetchType.EAGER) 
    private List<Order> orderList; 

...

@Entity 
public class Order /* in table CC_ORDER */ 
    @Id 
    BigDecimal orderId; 
    Customer customer; 

У меня есть проблема, когда я пытаюсь извлечь клиента, я получаю сообщение об ошибке, так как SQL, который генерируется с помощью JPA содержит выберите для несуществующей таблицы: CC_CUSTOMER_CC_ORDER

Что я делаю неправильно?

Спасибо!

Роб

ответ

2

У Вас есть недостающее @ManyToOne аннотация на клиенте клиента; и mappedBy = "клиент" в @OneToMany аннотацию

объект Customer

@OneToMany(fetch=FetchType.EAGER, mappedBy="customer") 
private List<Order> orderList; 

Заказать объект

@ManyToOne 
Customer customer; 

Из-за этого JPA думает, что ваши отношения является однонаправленным, и это решается присоединиться таблица с именем CC_CUSTOMER_CC_ORDER. Если вы позволите своему провайдеру сгенерировать схему, таблица должна быть сгенерирована.

+0

Спасибо - новая проблема, теперь запрос генерации ищет поле в таблице ORDER, которое ORDER.CUSTOMER_CUSTOMERID не существует, - какие-либо идеи? (ORDER.CUSTOMERID действительно существует.) –

+0

FYI, я добавил @JoinColumn (name = "customerid") после @ManyToOne и эту новую ошибку, когда прочь. Тем не менее, мой тест не загружается в Заказы, когда я получаю клиента. (Тип выборки нетерпелив на клиента.) Любые идеи? (Или я должен задать новый вопрос?) –

+0

Как вы вставляете данные в БД? Можете ли вы проверить, что таблицы содержат правильные значения (особенно если заполняется столбец customerid в таблице заказа)? Если вы вставляете JPA, не забудьте добавить заказ в список заказов, а также установить свойство клиента в объекте Order. –