Hibernate Spring Boot JPA OneToOne关系:如何在保存时强制插入两个实体?
我在帖子中创建了一个OneToOne关系: 类似地,我们有两个实体:Hibernate Spring Boot JPA OneToOne关系:如何在保存时强制插入两个实体?,hibernate,spring-boot,jpa,Hibernate,Spring Boot,Jpa,我在帖子中创建了一个OneToOne关系: 类似地,我们有两个实体:Invoice&InvoiceSequence,它基本上是一个序列 @Entity @Table(name = "invoices", indexes = {...}) @JsonIgnoreProperties(ignoreUnknown = true) public class Invoice implements Serializable { private static final long serialVer
Invoice
&InvoiceSequence
,它基本上是一个序列
@Entity
@Table(name = "invoices", indexes = {...})
@JsonIgnoreProperties(ignoreUnknown = true)
public class Invoice implements Serializable {
private static final long serialVersionUID = 1L;
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Id
private String id;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "invoice")
private InvoiceSequence invoiceSequence;
...
}
和InvoiceSequence实体:
@Entity
public class InvoiceSequence {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long seqId;
@OneToOne
private Invoice invoice;
@Override
public String toString() {
return new ToStringBuilder(this)
.append("seqId", seqId)
.toString();
}
}
但是当我们保存发票时,InvoiceSequence保存为null。
例如,在我的单元测试中
Invoice invoice = new Invoice();
invoice.setFleetId("F0001");
invoice.setInvoicesStatus(InvoicesStatus.PENDING);
invoice.setPricingId("1V1");
invoice.setInvoiceDate(Date.from(toInstant));
invoice.setTripId("000011111");
invoice.setServiceId("001111");
invoice.setUserId("1");
invoice.setAmount(new BigDecimal("56"));
invoiceService.save(invoice);
当我调试并查看(内存中,H2)db时,我看到invoiceSequence为null
问题很简单:在插入新发票时,如何确保具有长值递增的InvoiceSequence
但是我不能让它工作,你知道我做错了什么吗
谢谢这似乎是实现序列的错误方法。为什么不在
Invoice
中添加另一个字段,如sequence
,并使用以下内容生成它:
此外,如果您确实希望按照建议的方式执行,则需要手动创建InvoiceSequence
,然后在保存之前将其设置为Invoice
。您还需要将发票
设置为发票序列
,如下所述:
这似乎是实现序列的错误方法。为什么不在
Invoice
中添加另一个字段,如sequence
,并使用以下内容生成它:
此外,如果您确实希望按照建议的方式执行,则需要手动创建InvoiceSequence
,然后在保存之前将其设置为Invoice
。您还需要将发票
设置为发票序列
,如下所述:
由于您具有双向关系,因此必须确保设置了两个字段。您可能只在
Invoice
上设置了InvoiceSequence
,而不是相反。您能分享插入发票的方法以及如何填充Invoice
和InvoiceSequence
变量吗?@Zeromus我已经删除了可能不相关的注释。@Al MustafaAzhari i m通过针对h2 db的单元测试进行测试。。我想知道它是否与真正的mysql有所不同。您是否创建了InvoiceSequence对象并在Invoice对象中进行了设置?因为您具有双向关系,所以必须确保您同时设置了这两个字段。您可能只在Invoice
上设置了InvoiceSequence
,而不是相反。您能分享插入发票的方法以及如何填充Invoice
和InvoiceSequence
变量吗?@Zeromus我已经删除了可能不相关的注释。@Al MustafaAzhari i m通过针对h2 db的单元测试进行测试。。我想知道它是否与真正的mysql有所不同。您是否创建了InvoiceSequence对象并在Invoice对象中进行了设置?谢谢!我们正在使用MariaDb,但我知道我们可以使用选项1中的方法。我选择了选项2。谢谢!我们正在使用MariaDb,但我知道我们可以使用选项1中的方法。我选择了选项2。