2017-10-02 3 views
1

spring mvcおよびhibernateを使用して操作を実行および更新する簡単なアプリケーションがあります。しかし、私はエラーが発生しています。私は自分のデータ入力でcreatedAtとupdatedAt date時間を持っています。だから私はこれをどのように達成することができます。null以外のプロパティがnull値または一時的な値を参照しています:com.project.test.entity.Stamp.createdAt

POJO:

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Basic(optional = false) 
@Column(name = "id") 
private Integer id; 

@Basic(optional = false) 
@Column(name = "name") 
private String name; 

@CreationTimestamp 
@Basic(optional = false) 
@Column(name = "created_at") 
@Temporal(TemporalType.TIMESTAMP) 
private Date createdAt; 

@UpdateTimestamp 
@Column(name = "updated_at") 
@Temporal(TemporalType.TIMESTAMP) 
private Date updatedAt; 

コントローラー:

@Controller 
@RequestMapping(value = "/") 
public class HomeController { 
    @Autowired 
    private NameDao nDao; 

    @RequestMapping(method = RequestMethod.GET) 
    public String getIndex(Model model){ 
     model.addAttribute("message", "Welcome to Spring"); 
     model.addAttribute("sL", nDao.getAll()); 
     return "index"; 
    } 

    @RequestMapping(method = RequestMethod.POST) 
    public String addName(Model model, @ModelAttribute Stamp s){ 
     nDao.addName(s);  
     return "redirect:/"; 
    } 

    @RequestMapping(value="/update/{id}", method=RequestMethod.GET) 
    public String getUpdate(@PathVariable int id, Model model){ 
     Stamp st = (Stamp) nDao.getById(id); 
     model.addAttribute("s", st); 
     return "update"; 
    } 

    @RequestMapping(value="/update/{id}", method=RequestMethod.POST) 
    public String postUpdate(@ModelAttribute Stamp s){ 
     nDao.updateName(s); 
     return "redirect:/"; 
    } 

のindex.jsp:

<form method = "post" action="${SITE_URL}/"> 
     <div> 
      <label>Name: </label><input type="text" name="name"> 
     </div> 
     <input type="submit" value="Submit"> 
    </form> 

    <h3>List...</h3> 
    <c:forEach var="sl" items="${sL}"> 
    <li>${sl.name}&nbsp;${sl.createdAt}&nbsp;${sl.updatedAt}<a href="${SITE_URL}/detail/${sl.id}">Detail</a><a href="${SITE_URL}/update/${sl.id}">Update</a></li> 
    </c:forEach> 

Update.jsp:

<h1>Update Here...</h1> 
    <form method = "post"> 
     <div> 
      <label>Name: </label><input type="text" value="${s.name}" name="name"> 
     </div> 
     <input type="submit" value="Submit"> 
    </form> 

データをデータベースに保存できませんでした。 nullでないプロパティがnullまたは一時的な値を参照しています:com.project.test.entity.Stamp.createdAtエラー。ここで何が問題なの?

私のデータベーススキーマは次のとおりです。 enter image description here

+1

テーブルにDDLを追加してください。 – mdeterman

+0

そこに行く...私は早く画像を投稿するために逃した... @ mdeterman – Space

+0

修正する2つのオプションの1つ。 NOT NULL DEFAULT CURRENT_TIMESTAMPを追加するか、Entity Classを削除して更新列を更新します。@Basic(optional = true)[ここをクリック](https://stackoverflow.com/questions/46504448/how-to-insert-data-with-自動的に作成された値と更新された日付使用するspr/46504840#46504840) – mdeterman

答えて

0

私の推測では、データベーステーブル内のNULL値を持っていることです。

データベースでは、updatedAtはnullでもかまいませんが、JPAプロパティはオプションではありません。これは矛盾しています。

updatedAt属性の@Basic(オプション= false)アノテーションは、この属性が挿入時にnullであるため、削除します。私は正しい?

+0

はい、質問を確認してください。私は自分のデータベーススキーマの画像を提供しました。 – Space

関連する問題