我有三个表,表A(产品)、表B(发票)和表C(发票信息),其中包含引用发票标识和产品标识的两列。现在,如何插入新条目(新发票),同时将产品插入相应的表并将发票信息插入相应的表?
以下是实体类:产品名称
@Entity
@Table(name = "product")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "family_id")
private long familyId;
@Column(name = "product_name")
private String productName;
@Column(name = "product_category")
private String productCategory;
@Column(name = "product_quantity")
private int productQuantity;
//getters and setters
}
发票
@Entity
@Table(name = "invoice")
public class Invoice {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "invoice_id")
private Long id;
@Column(name = "provider_id")
private Long providerId;
@Column(name = "total")
private int invoiceTotal;
@Column(name = "date")
private Date invoiceDate;
//getters and setters
}
发票信息
@Entity
@Table(name = "invoice_info")
public class InvoiceInfo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "item_id")
private long id;
@Column(name = "product_id")
private long productId;
@Column(name = "invoice_id")
private long invoiceId;
//getters and setters
}
3条答案
按热度按时间nwwlzxa71#
InvoiceInfo应为联接表,根据您要求使用@OneToMany,@ManyToOne注解定义实体Product和Invoice关系
h9a6wy2h2#
要在将产品插入到product表时在invoice和invoice_info表中插入新条目,可以使用Hibernate API中的Session#persist方法。Session#persist方法允许您将实体保存到数据库中,并自动生成所需的SQL INSERT语句。
下面是一个示例,说明如何使用Session#persist方法将新发票和相关产品插入数据库:
在上面的代码中,我们创建了新的Product、Invoice和InvoiceInfo实体,然后使用Session#persist方法将它们保存到数据库中。这将自动生成所需的SQL INSERT语句,以便将新实体插入到相应的表中。
需要注意的是,Session#persist方法不会自动提交事务。这意味着您需要显式调用Session#commit方法来保存对数据库的更改。您可以通过在Session#persist调用后添加以下代码行来实现这一点:
kzipqqlq3#
您必须使用一组注解来建立实体之间的关系,例如:
@ManyToOne
、@OneToMany
、@ManyToMany
或@OneToOne
...以及其他注解(如果需要)。在您的情况下,我不确定是否需要
InvoiceInfo
表,因为Invoice
表已经可以(或应该)包含产品列表。我建议您建立以下关系:
产品名称
发票
由于您的表
InvoiceInfo
已不存在,您只需将数据插入两个表中,如下所示: