簡體   English   中英

從 postGres 觸發器自動生成主鍵時嘗試 saveAndFlush 提交 (JPA) 時出現問題

[英]Problem when attempting a saveAndFlush commit (JPA ) when primary key is auto-generated from postGres trigger

我正在使用 spring JPA 嘗試將記錄寫入 postGres DB。 在提交時,我收到以下錯誤:

Caused by: org.postgresql.util.PSQLException: ERROR: null value in column "col_id" violates not-null constraint
Detail: Failing row contains (null, null, null, null, null)

我有以下存儲庫界面:

public interface MyRepo extends JpaRepository <MyModel, String> {

}

,以下模型類:

@Entity
@Validated
@Table(name = "my_table", schema="common")
public class MyModel {

@Id
@Column(name = "col_id")
private String id;
@Column(name = "second_col")
private String secCol;
@Column(name = "third_col")
private String thirdCol;
@Column(name = "fourth_col")
private String fourthCol;
@Column(name = "fifth_col")
private String fifthCol;


public MyModel() {

}

public MyModel(String id, String secCol, String thirdCol, String fourthCol, String fifthCol) {
    this.id = id;
    this.secCol = secCol;
    this.thirdCol = thirdCol;
    this.fourthCol = fourthCol;
    this.fifthCol = fifthCol;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getSecCol() {
    return secCol;
}

public void setSecCol(String secCol) {
    this.secCol = secCol;
}

public String getThirdCol() {
    return thirdCol;
}

public void setThirdCol(String thirdCol) {
    this.thirdCol = thirdCol;
}

public String getFourthCol() {
    return fourthCol;
}

public void setFourthCol(String fourthCol) {
    this.fourthCol = fourthCol;
}

public String getFifthCol() {
    return fifthCol;
}

public void setFifthCol(String fifthCol) {
    this.fifthCol = fifthCol;
}
}

,以及服務類的相關部分:

public MyModel myModel  (MyModel myModel) {

    MyModel mm = null;
    try {
        mm = myRepo.saveAndFlush(myModel);
    } catch ( Exception e) {
        e.printStackTrace();
    }
    return mm;
}

更新:我終於意識到我的問題是由於數據庫觸發器根據復雜的業務規則自動生成主鍵。 另外,我假設我可能需要使用自定義保存方法而不是默認的 repo.saveAndFlush? 如果提供新信息,我將不勝感激。 謝謝!

我在 Postgres 的測試項目中復制了完全相同的代碼,它對我來說效果很好。 沒有填充模型類的值是絕對正確的。 您還必須共享您的控制器。 如果我可以查看從哪里調用您的服務,它可能真的對我有幫助。 只有這樣才能幫助我推斷為什么您的模型值在服務調用中作為 null 傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM