2016-06-21 3 views
2

Здравствуйте, Stackoverflow, мне было трудно с отображением OneToMany. У меня было googled, чтобы найти решение с утра ничего не помогло.Значение внешнего ключа вводит значение как null в преобразовании OneToMany

Я пытаюсь сделать связь @OneToMany. следующие классы:

Класс: 1

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "cbid") 
private int cbid; 

@ManyToOne(cascade = CascadeType.ALL) 
@JoinColumn(name = "cid", referencedColumnName = "custid", insertable = false, updatable = false) 
private CustomerDetails customerDetails; 

@Column(name = "customerid") 
private Integer customerid; 
@Column(name = "subtotal") 
private Double subtotal; 
@Column(name = "tax_amount") 
private Double tax_amount; 
@Column(name = "total_amount") 
private Double total_amount; 
@Column(name = "paid_amount") 
private Double paid_amount; 
@Column(name = "amount_due") 
private Double amount_due; 
@Column(name = "invoiceNumber") 
private int invoiceNumber; 
@Column(name = "d") 
private Date d; 

@OneToMany(mappedBy="cbpd", cascade=CascadeType.ALL, fetch=FetchType.LAZY) 
@OrderColumn(name="lindex") 
private List<ProductNameBuyingDetails> pnbd = new ArrayList<ProductNameBuyingDetails>(); 
//setters and getters 

Класс: 2

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "byno") 
private int buyingnumber; 
@Column(name = "productnumber") 
private Integer productNumber; 
@Column(name = "productname") 
private String productName; 
@Column(name = "productprice") 
private Double productPrice; 
@Column(name = "productquantity") 
private Double productQuantity; 
@Column(name = "producttotal") 
private Double productTotal; 

@ManyToOne(cascade=CascadeType.ALL) 
@JoinColumn(name="pbid", referencedColumnName="cbid", insertable=false, updatable=false) 
private CustomerBuyingProductsDetails cbpd; 
//setters and getters 

Я использую метод session.save() таким образом

CustomerBuyingProductsDetails customerBuyingProductsDetails = new CustomerBuyingProductsDetails(); 
    customerBuyingProductsDetails.setCustomerid(customerBuyingProducts.getCustomerid()); 
    customerBuyingProductsDetails.setInvoiceNumber(customerBuyingProducts.getInvoiceNumber()); 
    customerBuyingProductsDetails.setAmount_due(customerBuyingProducts.getAmount_due()); 
    customerBuyingProductsDetails.setD(customerBuyingProducts.getD()); 
    customerBuyingProductsDetails.setPaid_amount(customerBuyingProducts.getPaid_amount()); 
    customerBuyingProductsDetails.setSubtotal(customerBuyingProducts.getSubtotal()); 
    customerBuyingProductsDetails.setTax_amount(customerBuyingProducts.getTax_amount()); 
    customerBuyingProductsDetails.setTotal_amount(customerBuyingProducts.getTotal_amount()); 
    sessionFactory.getCurrentSession().save(customerBuyingProductsDetails); 

    Iterator<Integer> itrNum = customerBuyingProducts.getProductNumber().iterator(); 
    Iterator<String> itrName = customerBuyingProducts.getProductName().iterator(); 
    Iterator<Double> itrPrice = customerBuyingProducts.getProductPrice().iterator(); 
    Iterator<Double> itrQuan = customerBuyingProducts.getProductQuantity().iterator(); 
    Iterator<Double> itrTotal = customerBuyingProducts.getProductTotal().iterator(); 
    int i=0; 
    while (itrNum.hasNext()) { 

     ProductNameBuyingDetails pnbd = new ProductNameBuyingDetails(); 
     pnbd.setProductNumber(itrNum.next()); 
     pnbd.setProductName(itrName.next()); 
     pnbd.setProductPrice(itrPrice.next()); 
     pnbd.setProductQuantity(itrQuan.next()); 
     pnbd.setProductTotal(itrTotal.next()); 
     pnbd.setCbpd(customerBuyingProductsDetails); 
     sessionFactory.getCurrentSession().save(pnbd); 
     customerBuyingProductsDetails.getPnbd().add(pnbd); 
    } 
    sessionFactory.getCurrentSession().save(customerBuyingProductsDetails); 

} 

спящий режим генерирует запрос таким образом

Hibernate: insert into cb (amount_due, customerid, d, invoiceNumber, paid_amount, subtotal, tax_amount, total_amount, cbid) values (?, ?, ?, ?, ?, ?, ?, ?, ?) 
Hibernate: insert into prodnamebuy (productname, productnumber, productprice, productquantity, producttotal, byno) values (?, ?, ?, ?, ?, ?) 

Внешнее значение ключа не вставляется, в таблице базы данных он отображается пустой (null) Я не могу исправить, где я ошибаюсь. Заранее спасибо .. Надеемся на лучшее ..

ответ

0

Я думаю, что проблема может быть, что вы устанавливаете @JoinColumnвставляться атрибут к ложному, что означает, что столбец не будет включен в любом INSERT заявления. Кроме того, если вы делаете обновляется = false, он не будет включен ни в один ОБНОВЛЕНИЕ утверждений.

Для получения дополнительной информации, пожалуйста, обратитесь к статье this.

+0

спасибо за помощь, проблема разрешена ... Спасибо :) –

+0

Если проблема была решена в связи с одним из ответов, можете ли вы принять? :) – IntelliData

0

Кажется, что ваш параметр обновляется и вставляется в false. Это означает, что они читаются только. Пожалуйста, проверьте ссылку ниже Stack over flow Updatable and isnertable discussion

+0

Спасибо. Вы сделали мой день. –

Смежные вопросы