यदि आप स्वचालित रूप से id उत्पन्न करना चाहते हैं , तो एक प्रदान न करें, यहां तक कि यह null भी है . तो, id हटा दें addProduect . से विधि:
@Override
public void addProduct(String description, double price, Date date) {
jdbcTemplate.update("INSERT INTO products values(?, ?, ?)", description, price, date);
}
साथ ही, अपना id बनाएं फ़ील्ड auto-increment , जैसा कि इस प्रश्न
में है ।
या, addProduct बदलें विधि और उपयोग करें EntityManager#persist विधि:
@Override
public void addProduct(Product product) {
entityManager.persist(product);
}
त्रुटि के बारे में:
चूंकि आपका फॉर्म id नहीं लेता है क्लाइंट से मूल्य, /newproduct एंडपॉइंट में एक Product होगा null के साथ इसकी id . के रूप में मूल्य:
@RequestMapping(value = "/newproduct", method = RequestMethod.POST)
public ModelAndView submitForm(@ModelAttribute("product") Product product) { ... }
फिर आप इसे null . पास करते हैं addProduct . के पैरामीटर के रूप में मान विधि:
prDao.addProduct(product.getId(), ...)
और अंत में addProduct उस null . को सहेजने का प्रयास करेंगे प्राथमिक कुंजी . के मान के रूप में मान , जिसमें एक गैर-शून्य . है बाधा, तो आपको वह त्रुटि मिल गई है।
साथ ही, इकाई . का उपयोग करते हुए ग्राहक के साथ संचार के साधन के रूप में वस्तुएं, उदा। Product , अच्छा अभ्यास नहीं है। फॉर्म या डीटीओ जैसे कुछ सहायक सार को परिभाषित करने का प्रयास करें और फॉर्म हैंडलिंग या प्रतिक्रिया संयोजन के लिए उनका उपयोग करें।