【问题标题】:Save is not performing in Spring Mvc 3Hibernate保存未在 Spring Mvc 3Hibernate 中执行
【发布时间】:2013-05-13 15:50:41
【问题描述】:

Article类:

package net.devmanuals.model;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;

    @Entity
    @Table(name = "imei")
    public class Article {
    @Id
        @Column(name = "imei1",nullable = false)
    private Long imeiNo;
        @Column(name = "date_added")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date addedDate;

    public Article() {      
    }

        public Long getimei1() {
        return imeiNo;
    }

    public void setimei1(Long imei1) {
        this.imeiNo = imeiNo;
    }

        public Date getAddedDate() {
        return addedDate;
    }

    public void setAddedDate(Date addedDate) {
        this.addedDate = addedDate;
    }   
}

ArticleController类:

package net.devmanuals.controller;

import java.util.HashMap;
import java.util.Map;

import net.devmanuals.model.Article;
import net.devmanuals.service.ArticleService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/articles")
public class ArticleController {

    @Autowired
    private ArticleService articleService;

    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public ModelAndView saveArticle(@ModelAttribute(" article") Article  article,
            BindingResult result) {
         articleService.addArticle( article);
        return new ModelAndView("redirect:/articles.html");
    }

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView listArticles() {

    Map<String, Object> model = new HashMap<String, Object>();
        model.put("articles",  articleService.listArticles());

        return new ModelAndView("articlesList", model);
    }

    @RequestMapping(value = "/add", method = RequestMethod.GET)
    public ModelAndView addArticle(@ModelAttribute("article") Article article,
            BindingResult result) {
        return new ModelAndView("addArticle");
    }

}

Article服务:

package net.devmanuals.service;

import java.util.List;

import net.devmanuals.model.Article;

public interface ArticleService {

    public void addArticle(Article article);

    public List<Article> listArticles();
}

保存数据时出现此错误,(但显示数据时没有错误):

exception
org.springframework.web.util.NestedServletException: Request processing failed; nested 
exception is org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): net.devmanuals.model.Article
    root cause
 org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): net.devmanuals.model.Article

【问题讨论】:

  • 代码太多,发SSCCE
  • 您需要一个 ID 生成方案。重复:stackoverflow.com/questions/10997494/…
  • 先生,我添加了@GeneratedValue,但知道还有其他错误。先生,实际上我想插入imei(即手动而不是自动生成的id)
  • @MrD 我认为它会解决我的问题,所以这就是为什么我发布了 3 个课程
  • 请帮我手动输入Id并保存数据

标签: java mysql hibernate spring-mvc


【解决方案1】:

例外说明了一切。在持久化实体之前,您必须为其分配一个 ID。所以只需在调用persist() 之前调用一个设置imeiNo 值的方法。不幸的是,你没有任何这样的方法。唯一一个看起来像这样的二传手的是以下一个:

public void setimei1(Long imei1) {
    this.imeiNo = imeiNo;
}

但是,它不仅名字不好(应该叫setImeiNo),而且它还有一个明显的错误:它完全忽略了它的参数,并将imeiNo的值设置为它已经拥有的值。

鉴于您的 getter 和 setter 很混乱,我的建议是:

  • 全部删除
  • 使用您的 IDE 自动重新生成它们

setter 应该是:

public void setImeiNo(Long imeiNo) {
    this.imeiNo = imeiNo;
}

【讨论】:

  • 好的,谢谢大家,我会尽力做到你们都告诉过的然后回复你,谢谢
  • 感谢大家,实际上这是我的错误,你是对的先生@JB Nizet。我的错误是 public void setimei1(Long imei1) { this.imeiNo = imeiNo; }
  • 但是先生,我想在日期显示时也显示时间。在我的数据库中显示日期和时间,但不在浏览器中,请告诉我如何获取时间?
  • 如果你想有日期和时间,你不觉得 TemporalType.TIMESTAMP 会比 TemporalType.DATE 更合适吗?
  • 先生,您能告诉我如何一次在两个数据库中输入值吗?因为我必须在一张表中输入imei号码,在第二张表中输入imei以及日期和时间。我已经执行了第二个表的工作,但我不知道如何在两个表中一次输入值。可以的话请帮忙
【解决方案2】:

给你一个模型,它会自动递增,你应该不会看到错误,也不需要自己添加 id

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

【讨论】:

  • 感谢@MatthiasLaug,但实际上我需要手动添加id(即imei no)。还是谢谢
猜你喜欢
  • 2015-05-11
  • 2023-03-17
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2016-11-17
  • 1970-01-01
相关资源
最近更新 更多