【发布时间】:2015-01-14 17:52:41
【问题描述】:
我有以下问题:
我正在使用带有 Hibernate 4.3.5 的 Spring MVC 4.0.5,并且我正在尝试创建一个 Restfull Web 应用程序。问题是我想排除一些字段被序列化为 JSON,这取决于控制器中使用方面调用的方法。
我现在的问题是 Hiberate 不会在从方法返回之后立即提交事务,而是在序列化之前。
Controller.java
public class LoginController {
/*
* Autowire all the Services and stuff..
*/
@RemoveAttribues({"fieldA","fieldB"})
@RequestMapping{....}
public ResponseEntity login(@RequestBody user) {
User updatedUser = userService.loginTheUser(user);
return new ResponseEntity<>(updatedUser,HttpStatus.OK);
}
}
Service.java
public class UserService {
@Transactional
public User loginUser(User user) {
user.setLoginToken("some generated token");
return userDao.update(user); //userDao just calls entityManager.merge(..)
}
}
方面的建议执行以下操作:
for every String find the corresponding setter and set the field to null
正如我所说,这样做是为了避免数据序列化(使用 Jackson 2)
现在的问题是只有在通知完成后才会提交事务。我可以做些什么来告诉 hibernate 立即提交,还是我必须深入挖掘并自己开始处理事务(我想避免这种情况)?
编辑: 我也开启了自动提交
<prop key="hibernate.connection.autocommit">true</prop>
我认为问题在于我使用延迟加载(因为每个用户可能有大量其他实体附加到他身上),所以在我尝试序列化对象之前不会提交事务。
【问题讨论】:
-
使用事务,但开启自动提交?? O_o
-
我确实打开了自动提交。
标签: java spring hibernate jpa transactions