2012-03-20 35 views
2

我想我的方式繞過JPA,但我不能得到這個以我理解他們的方式工作。非空屬性例外與JPA onetoone映射

及其訂單和OrderInvoice類,這是一個需要 關聯

我的實體被標記爲這個

@Entity 
@Table(name = "Orders") 
public class Order { 
    @Id 
    @GeneratedValue 
    @Column(name = "ORDER_ID") 
    private int orderId; 

    @OneToOne(optional=false,cascade=CascadeType.ALL, mappedBy="order", targetEntity=OrderInvoice.class) 
    private OrderInvoice invoice; 
} 

@Entity 
@Table(name = "ORDER_INVOICE") 
public class OrderInvoice { 
    @Id 
    @GeneratedValue 
    @Column(name = "INVOICE_ID", nullable = false) 
    private int invoiceId; 

    @OneToOne(optional = false) 
    @JoinColumn(name="ORDER_ID") 
    private Order order; 
} 

我的測試類是這樣的onetoone雙向映射。

@Test 
public void createOrder() { 
    Order order = createOrderImpl(); 
    assertNotNull(order); 
} 

private Order createOrderImpl() { 
    OrderInvoice orderInvoice = new OrderInvoice(new Date(), 100.0, null, 
      null, new Date()); 
    Order order = new Order(100.0, "JOHN Doe's Order", new Date(), new Date(),orderInvoice); 
    orderDao.create(order); 
    return order; 
} 

但我遇到以下問題,當我運行測試

javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: order.OrderInvoice.order 
    at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614) 

Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: order.OrderInvoice.order 
    at org.hibernate.engine.Nullability.checkNullability(Nullability.java:95) 

回答

1

嘗試

orderInvoice.setOrder(order); 
orderDao.create(order);