[英]Spring Data JPA save() return entity
我正在使用彈簧啟動數據 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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.