Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 保存双向关联而不使用级联_Hibernate - Fatal编程技术网

Hibernate 保存双向关联而不使用级联

Hibernate 保存双向关联而不使用级联,hibernate,Hibernate,问题是,是否可以在hibernate中保存双向关联而不使用cascade注释,从而避免暂时的对象异常。如果不使用cascade,则需要明确地保存这两个实体 entity1.setEntity(entity2) entity2.setEntity(entity1) session.save(entity1) session.save(entity2) 您可以使用cascade=CascadeType.ALL进行此操作 @Entity @Table(name = "invoice"

问题是,是否可以在hibernate中保存双向关联而不使用cascade注释,从而避免暂时的对象异常。

如果不使用cascade,则需要明确地保存这两个实体

entity1.setEntity(entity2)
entity2.setEntity(entity1)
session.save(entity1)
session.save(entity2)

您可以使用cascade=CascadeType.ALL进行此操作

    @Entity
    @Table(name = "invoice")
    public class Invoice {

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

        @Column(name = "invoice_date")
        @Temporal(TemporalType.TIMESTAMP)
        private Date invoiceDate;

        @Column(name = "customer")
        private String customer;

        @OneToMany(fetch = FetchType.EAGER, mappedBy = "itemPk.invoice", cascade = CascadeType.ALL)
        private List<InvoiceItem> invoiceItems;
....

}
@实体
@表(name=“发票”)
公共类发票{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”)
私有int-id;
@列(名称=“发票日期”)
@时态(TemporalType.TIMESTAMP)
私人日期发票日期;
@列(name=“客户”)
私人字符串客户;
@OneToMany(fetch=FetchType.EAGER,mappedBy=“itemPk.invoice”,cascade=CascadeType.ALL)
私人物品清单;
....
}
那么在你的代码中

InvoiceDao invoiceDao =  new InvoiceDao();
Invoice invoice =  new Invoice();
invoice.setInvoiceDate(new Date());
invoice.setCustomer("Sameera");

InvoiceItem invoiceItem1 =  new InvoiceItem();
invoiceItem1.setQty(10);
invoiceItem1.setPrice(100.10d);

InvoiceItemPK itemPk1 = new InvoiceItemPK();
itemPk1.setInvoice(invoice);
itemPk1.setItem(item);
invoiceItem1.setItemPk(itemPk1);

List<InvoiceItem> items = new ArrayList<>();
items.add(invoiceItem1);
invoice.setInvoiceItems(items);
invoiceDao.save(invoice);
InvoiceDao InvoiceDao=new InvoiceDao();
发票=新发票();
invoice.setInvoiceDate(新日期());
发票。setCustomer(“Sameera”);
InvoiceItem invoiceItem1=新的InvoiceItem();
发票项1.设置数量(10);
发票项目1.设定价格(100.10d);
InvoiceItemPK itemPk1=新的InvoiceItemPK();
项目PK1.设置发票(发票);
itemPk1.setItem(项目);
invoiceItem1.setItemPk(itemPk1);
列表项=新建ArrayList();
项目。添加(发票项目1);
发票。设置发票项目(项目);
发票保存(发票);