據我所知,JpaRepository save() 方法應該更新我在數據庫中的實體。我在 MySQL 中有一個名為 REF_PERIOD 的表,只有兩列:code_id,它是 INT 和主鍵,以及 code_name,它是 VARCHAR。這是我的實體:@Data@Entity@Table(name = "REF_PERIOD")public class PayRefPeriod { @Id @Column(name = "code_id") private int codeId; @Column(name = "code_name", length = 254, nullable = false) private String codeName;}我的存儲庫:@Repositorypublic interface PayRefPeriodRepository extends JpaRepository<PayRefPeriod, Integer> {}和控制器:@Slf4j@RestController@RequestMapping("/api")public class PayRefPeriodController { @Autowired private PayRefPeriodRepository payRefPeriodRepository; // Get all pay reference periods @GetMapping("/payrefperiods") public List<PayRefPeriod> getAllPayRefPeriod() { return payRefPeriodRepository.findAll(); } // Create a new pay reference period @PostMapping("/payrefperiods") public PayRefPeriod createPayRefPeriod(@Valid @RequestBody PayRefPeriod payRefPeriod) { return payRefPeriodRepository.save(payRefPeriod); } // Get a single pay reference period @GetMapping("/payrefperiods/{id}") public PayRefPeriod PayRefPeriod(@PathVariable(value = "id") int payRefPeriodId) { return payRefPeriodRepository.findById(payRefPeriodId) .orElseThrow(() -> new ResourceNotFoundException("PayRefPeriod", "id", payRefPeriodId)); } // Update a pay reference period @PutMapping("/payrefperiods/{id}") public PayRefPeriod updatePayRefPeriod(@PathVariable(value = "id") int payRefPeriodId, @Valid @RequestBody PayRefPeriod payRefPeriodDetails) { }我希望 updatePayRefPeriod 方法更新我的實體(在 MySQL 數據庫中具有 Id 0),但是它拋出異常:java.sql.SQLIntegrityConstraintViolationException:鍵“PRIMARY”的重復條目“0”。我做錯了什么?
2 回答

偶然的你
TA貢獻1841條經驗 獲得超3個贊
我想這可能是 mysql 驅動程序特定的限制,int當我們將它用作標識符時,對于 java 原始類型。我建議您將 的類型更改codeId為其盒裝對象類型Integer。
@Id
@Column(name = "code_id")
private Integer codeId;
因此,當底層休眠生成相應的更新查詢時,它可以理解空標識符與非空但值為0的標識符之間的區別。

紫衣仙女
TA貢獻1839條經驗 獲得超15個贊
嘗試將 sequenceGenerator 和 GeneratedValue 添加到您的 id 列。
@Data
@Entity
@Table(name = "REF_PERIOD")
public class PayRefPeriod {
@SequenceGenerator(name = "generator", sequenceName = "REF_PERIOD_ID_SEQ")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "generator")
@Id
@Column(name = "code_id")
private int codeId;
@Column(name = "code_name", length = 254, nullable = false)
private String codeName;
}
添加回答
舉報
0/150
提交
取消