Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 Spring Boot JPA OneToOne关系:如何在保存时强制插入两个实体?_Hibernate_Spring Boot_Jpa - Fatal编程技术网

Hibernate Spring Boot JPA 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

我在帖子中创建了一个OneToOne关系:

类似地,我们有两个实体:
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。