Jika Anda ingin membuat id
secara otomatis , maka jangan berikan satu, bahkan itu null
. Jadi, hapus id
dari addProduect
metode:
@Override
public void addProduct(String description, double price, Date date) {
jdbcTemplate.update("INSERT INTO products values(?, ?, ?)", description, price, date);
}
Buat juga id
bidang auto-increment
, seperti dalam pertanyaan
ini .
Atau, ubah addProduct
metode dan gunakan EntityManager#persist
metode:
@Override
public void addProduct(Product product) {
entityManager.persist(product);
}
Tentang kesalahan:
Karena formulir Anda tidak menggunakan id
nilai dari klien, /newproduct
titik akhir akan memiliki Product
dengan null
sebagai id
nilai:
@RequestMapping(value = "/newproduct", method = RequestMethod.POST)
public ModelAndView submitForm(@ModelAttribute("product") Product product) { ... }
Kemudian Anda melewati null
. ini nilai sebagai parameter ke addProduct
metode:
prDao.addProduct(product.getId(), ...)
Dan akhirnya addProduct
akan mencoba menyimpan null
. itu nilai sebagai nilai Kunci Utama , yang memiliki Non-Null kendala, jadi Anda mendapatkan kesalahan itu.
Juga, menggunakan Entitas objek sebagai sarana komunikasi dengan klien, mis. Product
, bukan praktik yang baik. Coba definisikan beberapa abstraksi tambahan seperti Formulir atau DTO dan gunakan untuk penanganan formulir atau perakitan respons.