我正在学习Spring,Hibernate,Jackson& AngularJS。
我正在尝试了解使用Spring,Hibernate,Jackson& S时应用程序和数据库之间的生命周期。 AngularJS。因为我觉得我在杰克逊和杰克逊之间感到困惑Java序列化/反序列化....他们做同样的事情吗?他们在不同的时间做不同的事情。
以下是Hiberante ORM架构的简单图表,我在阅读文档时如何理解它。 Hibernate使用applicationContext或config.xml中的配置创建单个SessionFactory并在整个应用程序中共享它。 SessionFactory创建会话,其中包含save(),saveOrUpdate(),delete()......等方法。
Hibernate有3种操作状态。
所以如果我有一个将书籍插入数据库的控制器
// create book entry
@RequestMapping(path="/booklist", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Book> newBook(@RequestBody @Valid Book book, BindingResult result){
if(result.hasErrors()){
//------
// Some error code handling
//------
book.setErrorObjBuilder(errorObjBuilder);
return new ResponseEntity<Book>( book, HttpStatus.NOT_ACCEPTABLE);
}else{
bookDao.saveOrUpdate(book);
return new ResponseEntity<Book>(book, HttpStatus.ACCEPTED);
}
};
书籍对象传入newBook(@RequestBody @Valid Book book)
它是否已经序列化(java.io.Serializable)?或序列化发生在bookDao.saveOrUpdate(book)
序列化是否在本书是持久对象之前发生?
在上面的示例中,杰克逊序列化或反序列化何时发生?
谢谢
答案 0 :(得分:2)
首先,不建议在控制器中调用DAO逻辑,最好有一个服务调用DAO逻辑来分离关注点,并能够将每个业务逻辑保留在事务中。
book对象被传递给newBook(@RequestBody @Valid Book 它已经序列化了(java.io.Serializable)?要么 序列化发生在bookDao.saveOrUpdate(书)
这不是序列化,这是desirialzation,序列化将java对象转换为序列化格式(如json)而反序列化则相反,反序列化发生在servlet映射器映射请求之后和触发api之前,这就是为什么如果反序列化存在问题,api将不会被触发。
序列化是否在书籍持久化之前发生
对象?
Hibernate是一个ORM,它将java对象模型映射到关系模型,因此将保留的是jave模型,反序列化发生在控制器级别
在上面的例子中,杰克逊是序列化还是反序列化 放置?
我已经回答了反序列化部分,对于序列化,它会在你的控制器返回结果后发生,以防你的api方法有@ResponseBody或你的控制器是一个RestController