繁体   English   中英

外键值在OneToMany映射中将值插入为null

[英]Foreign key value is inserting value as null in OneToMany mapping

您好Stackoverflow,我很难使用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以这种方式生成查询

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 (?, ?, ?, ?, ?, ?)

外键值未插入,在数据库表中显示为空(空),我无法纠正我要去哪里。 在此先感谢..希望最好..

似乎您的设置可更新且可插入为false。 这意味着要说它们是只读的。 请检查以下链接Stack over flow可更新和可更改的讨论

我认为问题可能是您将@JoinColumn可 插入属性设置为false ,这意味着该列将不包含在任何INSERT语句中。 另外,如果您执行updateable = false ,它将不会包含在任何UPDATE语句中。

欲了解更多信息,请参阅文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM