यदि आप स्वचालित रूप से 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
, अच्छा अभ्यास नहीं है। फॉर्म या डीटीओ जैसे कुछ सहायक सार को परिभाषित करने का प्रयास करें और फॉर्म हैंडलिंग या प्रतिक्रिया संयोजन के लिए उनका उपयोग करें।