gpt4 book ai didi

java - Spring Data JPA save() 返回实体

转载 作者:行者123 更新时间:2023-12-01 19:44:50 24 4
gpt4 key购买 nike

我正在使用 spring boot data jpa 如下

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


@Id
@Column(name = "inv_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private BigInteger invId;

@Column(name = "external_id")
private String externalInvoiceId;

@Column(name = "amount")
private double amount;

@JsonIgnore
@JsonIgnoreProperties
@Column(name = "status")
private int status;

@JsonProperty("status")
@Transient
private String invoiceStatus;


public String getInvoiceStatus() {
switch (this.status){
case 1:
return "INITIATED";
case 2:
return "CANCELLED";
case 3:
return "SUCCESS";
case 4:
return "FAILURE";
default:
return "IN PROGRESS";

}

}

@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_at")
private Date createdAt;

@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "updated_at")
private Date updatedAt;


@PostPersist
public void updateExternalID() {
this.externalInvoiceId="G".concat(String.valueOf(this.invId.multiply(BigInteger.valueOf(1000))))
.concat(String.valueOf(Instant.now().getEpochSecond()));

}
}

我通过存储库访问此条目,如下所示

public interface InvoicesRepository extends JpaRepository<Invoice, BigInteger> {
}

在我的@Service 正在执行以下操作

@Autowired
private InvoicesRepository myInvoicesRepository;

Invoice transactionInvoice = new Invoice();
transactionInvoice.setAmount(200.0);
transactionInvoice.setStatus(1);
Invoice savedInvoice = myInvoicesRepository.save(transactionInvoice);

正在使用savedInvoice并尝试更新状态。要么它没有正确更新状态,要么我也无法在数据库中找到该记录。

不存在回滚

下面是我可以看到存在插入语句的日志

[XNIO-1 task-1] DEBUG org.hibernate.SQL.logStatement -
/* insert com.min.app.model.Invoice
*/ insert
into
invoice
(amount, created_at, external_inv_id, status, updated_at)
values
(?, ?, ?, ?, ?)
Hibernate:
/* insert com.min.app.model.Invoice
*/ insert
into
invoice
(amount, created_at, external_inv_id, status, updated_at)
values
(?, ?, ?, ?, ?)

状态更新后,我尝试打印 savedInvoice 可以在日志中看到以下内容

Invoice(invId=58, externalInvoiceId=G580001575271905, amount=185.0 status=4, invoiceStatus=FAILURE, createdAt=Mon Dec 02 13:01:45 IST 2019, updatedAt=Mon Dec 02 13:01:45 IST 2019)

上面的记录我在表中看不到。

我做错了什么?

最佳答案

您需要在函数调用中执行事务,如下所示,并将您的 @Autowired 存储库放入全局级别,如下所示。

class whatever{
@Autowired
private InvoicesRepository myInvoicesRepository;

//call this function
void doSomething(){
Invoice transactionInvoice = new Invoice();
transactionInvoice.setAmount(200.0);
transactionInvoice.setStatus(1);
Invoice savedInvoice = myInvoicesRepository.save(transactionInvoice);
}
}

关于java - Spring Data JPA save() 返回实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59134514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com