2012-02-28 81 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