2012-02-28 78 views
2

我有一個運行簡單的JPA項目(在WebSphere 7上使用IBM RAD 7.5)。一個簡單的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; 

我的問題是,當我嘗試檢索一個客戶,我得到一個錯誤,因爲那是由JPA生成的SQL包含選擇一個不存在的表稱爲:CC_CUSTOMER_CC_ORDER

我在做什麼錯了?

謝謝!

Rob

回答

2

您在客戶客戶處缺少@ManyToOne批註;和的mappedBy =「客戶」在@OneToMany批註

客戶實體

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

Order實體

@ManyToOne 
Customer customer; 

正因爲如此JPA的認爲你們的關係是單向的,這是由連接表命名爲解決CC_CUSTOMER_CC_ORDER。如果讓您的提供者生成模式,則應該生成該表。

+0

感謝 - 一個新問題,現在生成查詢正在ORDER表中尋找一個ORDER.CUSTOMER_CUSTOMERID字段,它不存在 - 任何想法? (ORDER.CUSTOMERID確實存在。) – 2012-02-28 17:06:11

+0

僅供參考,我在@ManyToOne後添加了@JoinColumn(name =「customerid」),並在離開時添加了新錯誤。但是,當我檢索客戶時,我的測試未在訂單中加載。 (提取類型渴望客戶。)任何想法? (或者我應該提出一個新問題?) – 2012-02-28 17:19:06

+0

如何將數據插入到數據庫中?你能否檢查表中是否包含正確的值(特別是如果訂單表中的customerid列被填充)?如果您使用JPA插入,請不要忘記將訂單添加到訂單列表中,並在訂單實體中設置客戶財產。 – 2012-02-29 06:52:56