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を保存しようとします 主キーの値としての値 、 Non-Null 制約があるため、そのエラーが発生します。
また、エンティティを使用する クライアントとのコミュニケーション手段としてのオブジェクト。 Product 、は良い習慣ではありません。フォームやDTOなどの補助的な抽象化を定義し、それらをフォームの処理や応答の組み立てに使用してみてください。