gpt4 book ai didi

java - hibernate 关系: Column 'purchaseId' cannot be null

转载 作者:行者123 更新时间:2023-12-02 09:40:34 27 4
gpt4 key购买 nike

我有购买到购买详细信息的一对多关系。购买实体具有基本详细信息,购买详细信息将具有所购买商品的列表。我想要实现的是,当将数据保存到购买表(父)中时,所购买商品的列表也会自动保存在购买详细表(子)中。

2019-07-19 13:05:53.581 WARN 8868 --- [nio-8060-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1048, SQLState: 23000 2019-07-19 13:05:53.581 ERROR 8868 --- [nio-8060-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : Column 'purchaseId' cannot be null

Purchase.java

@Entity
@Table(name = "purchase")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Purchase {

@Id
@GeneratedValue(strategy = GenerationType.TABLE)
@Column(name = "purchaseId")
private BigInteger purchaseId;

@ManyToOne(cascade = CascadeType.MERGE)
@JoinColumn(name="accountId", nullable = false)
private Account account;

@JsonBackReference
@OneToMany(mappedBy="purchase",fetch=FetchType.LAZY,cascade = CascadeType.PERSIST)
private List<PurchaseDetails> purchaseDetails = new ArrayList<PurchaseDetails>();

private Date purchaseDate;
private String name;
private String address;
private String whatsapp;
private String payStatus;
private int creditDays;
private Float loading;
private BigInteger purchaseAmount;
private BigInteger receivedAmount;
private String remarks;
private Date creation;
private Date lastedit;
private Boolean isDeleted;

@PrePersist
protected void onCreate() {
creation = new Date();
lastedit = new Date();
isDeleted = false;
}

}

PurchaseDetails.java

@Entity
@Table(name = "purchaseDetails")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class PurchaseDetails {

@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private BigInteger purchaseDetailId;

@ManyToOne(fetch = FetchType.LAZY, targetEntity = Purchase.class)
@JoinColumn(name="purchaseId", referencedColumnName = "purchaseId", nullable = false)
// @MapsId(value = "purchaseId")
private Purchase purchase;

@OneToOne(cascade = CascadeType.MERGE)
@JoinColumn(name = "itemId", nullable = false)
private Item item;

private Float quantity;
private Float rate;
private Float rateGST;
private Float subTotal;
private Float subTotalGST;
private Date creation;
private Date lastedit;
private Boolean isDeleted;

@PrePersist
protected void onCreate() {
creation = new Date();
lastedit = new Date();
isDeleted = false;
}

}

PurchaseService.java

@Service
public class PurchaseService {

@Autowired PurchaseRepository purchaseRepository;

public boolean newPurchase(Purchase purchase, StringResponseDTO response)
{
if(isValidPurchaseData(purchase))
{
System.out.println("Service: "+purchase.toString());
purchase.setPurchaseDetails(purchase.getPurchaseDetails());
purchaseRepository.save(purchase);
response.setMessage("Purchase of "+ purchase.getName() + " is added successfuly");
return true;
}
else
{
response.setMessage("Please Provide Valid Data");
return false;
}
}
}

来自 Postman 的输入的 JSON (值仅用于测试,因此请忽略 subTotal 等)

{
"purchaseDate":"2019-07-18T08:37:41.000+0000",
"name":"PersonName",
"address":"Besides xyz Hotel, NH - 5, India",
"whatsapp":"1234567899",
"payStatus":"Paid",
"creditDays":"0",
"purchaseAmount":"2600",
"receivedAmount":"2600",
"loading":"100",
"remarks":"Not Any",
"purchaseDetails":[
{

"quantity":"523.6",
"rate":"67",
"rateGST":"70",
"subTotal":"35081",
"subTotalGST":"36652",
"item":{
"itemId":"14"
}
},
{
"quantity":"222.6",
"rate":"67",
"rateGST":"70",
"subTotal":"35081",
"subTotalGST":"36652",
"item":{
"itemId":"16"
}
}],
"account":{
"accountId":"4"
}
}

最佳答案

您创建了与父级和子级的双向关系。如果您想通过级联保存父级及其子级,则还需要在子级上设置父级,否则您将出现错误。请尝试:

for (PurchaseDetail purchaseDetail : purchase.getPurchaseDetails()) {
purchaseDetail.setPurchase(purchase);
}
purchase.setPurchaseDetails(purchase.getPurchaseDetails());
purchaseRepository.save(purchase);

关于java - hibernate 关系: Column 'purchaseId' cannot be null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57107787/

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