【问题标题】:How to get data from a form and store it in multiple tables in spring mvc hibernate如何从表单中获取数据并将其存储在spring mvc hibernate中的多个表中
【发布时间】:2013-05-19 17:10:34
【问题描述】:

我有这些课程:

文章分类:

@Entity
@Table(name = "imei")
public class Article {
    @Id
    //@GeneratedValue
    @Column(name = "imei1",nullable = false)
    private Long imeiNo;
    @Column(name = "date_added")
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
        private Date addedDate;
    public Article() {      
    }
        public Long getImeiNo() {
        return imeiNo;
    }
    public void setImeiNo(Long imeiNo) {
        this.imeiNo = imeiNo;
    }
        public Date getAddedDate() {
        return addedDate;
    }

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

ArticleDao 类:

public interface ArticleDao {
// To Save the article detail
public void saveArticle(Article article );

// To get list of all articles
public List<Article> listArticles();
}

ArticleDaoImpl 类:

@Repository("articleDao")
public class ArticleDaoImpl implements ArticleDao {

    @Autowired
    private SessionFactory sessionFactory;

    // To Save the article detail
    public void saveArticle(Article article) {
        article.setAddedDate(new Date());

        sessionFactory.getCurrentSession().saveOrUpdate(article);
    }

    // To get list of all articles
    @SuppressWarnings("unchecked")
    public List<Article> listArticles() {       
        return (List<Article>) sessionFactory.getCurrentSession().createCriteria(Article.class).list();
    }
}

文章控制器:

@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");
    }

}

文章服务:

public interface ArticleService {

public void addArticle(Article article);

public List<Article> listArticles();
}

ArticleServiceImpl 类:

@Service("articleService")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class ArticleServiceImpl implements ArticleService {

    @Autowired
    private ArticleDao articleDao;

    public ArticleServiceImpl() {
    }

    @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
    public void addArticle(Article article) {
        articleDao.saveArticle(article);
    }

    public List<Article> listArticles() {
        return articleDao.listArticles();
    }

}

现在创建了另一个类, OnlyImei.java

@Entity
@Table(name = "onlyimei")
public class OnlyImei {
@Id
    @Column(name = "imei1",nullable = false)
private Long imeiNo;
    public OnlyImei() {     
}
public Long getImeiNo() {
    return imeiNo;
}
      public void setImeiNo(Long imeiNo) {
    this.imeiNo = imeiNo;
}
  }

你能告诉我如何一次在两个表中输入值吗?我必须在一张表中输入imei号码,在第二张表中输入imei以及日期和时间。我已经制作了第二个表,但我不知道如何在两个表中同时输入值。

【问题讨论】:

    标签: java spring hibernate model-view-controller


    【解决方案1】:

    使用您的服务方法。写入事务中的两个表。我没有看到第二个 DAO 类,所以我正在为这个示例编写一个。

    @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
    public void addArticleToBook(Article article, Book book) {
        articleDao.saveArticle(article);
        bookDao.addArticle(article, book.getId());
    }
    

    工作将在同一个事务中完成。

    实际上,以上可能不是最好的。鉴于 Hibernate 支持关系的方式,如果您正确配置了 Hibernate 并使用了 Spring Hibernate 模板,您应该能够做到这一点:

    @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
    public void addArticleToBook(Article article, Long bookId) {
        this.sessionFactory.getCurrentSession()
                           .loadBookById(bookId)
                           .getArticles()
                           .add(article);
    }
    

    【讨论】:

    • 先生无法做到这一点,我已经添加了我的新课程 OnlyImei。请看看该怎么做
    【解决方案2】:

    您需要在您的服务中创建一个方法,(您可以扩展您的 addArticle() 方法)。

    你注入两个 Daos(如果有两个)一个是 Table1Dao,另一个是 Table2Dao。然后在这个服务方法中,你这样做:

    table1Dao.addxxx(article)
    table2Dao.addxxx(article)
    

    参数灵活(article, int, array, list, other type),看你是怎么实现dao方法的。重要的是,服务方法应该在一个事务中执行。

    【讨论】:

    • @Transactional(propagation = Propagation.REQUIRED, readOnly = false) public void addArticle(Article article,OnlyImei onlyImei) { articleDao.saveArticle(article); onlyImeiDao.saveOnlyImei(onlyImei); } 仍然不工作
    • 我的控制器也改变了:@RequestMapping(value = "/save", method = RequestMethod.POST) public ModelAndView saveArticle(@ModelAttribute(" article") Article article,OnlyImei onlyImei, BindingResult 结果) { articleService.addArticle(article,onlyImei); return new ModelAndView("redirect:/articles.html"); } 仍然不工作:
    • 我在两个表中都有一个字段 Imei1,在第二个表中我有第一个字段 imei1 和第二个字段日期/时间。在第一个表中 imei1 是主键,在第二个表中我可以有重复的 imei 号码。所以现在请告诉我如何在两个表中添加数据,我已经执行了你所说的但它没有工作..请告诉我
    猜你喜欢
    • 1970-01-01
    • 2017-05-09
    • 2013-05-27
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多