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などの補助的な抽象化を定義し、それらをフォームの処理や応答の組み立てに使用してみてください。