Spring-Transaction
事务传播
事务的传播特性。当 spring 托管事务的时候。在 Service 层的实现中,可能会出现,一个 Service 方法的实现,可能依赖于其它的 Service的多个方法。而这几个方法都是存在事务的,那么那些被嵌套调用的方法上的事务,如何创建呢,是挂起当前的事务,创建一个新的事务,还是直接就在当前事务中执行。这个就是事务的传播。
事务托管之后
一旦事务被托管,则 dao 层中就不应该再创建事务。
如果使用的Session 是当前事务中的Session,也就是,通过 getCurrentSession 获得到的Session,则不应该使用这个 Session 对象来创建事务对象,并开启一个事务,因为事务对象已经被开启了,所以调用 beginTransaction 并没什么用,但是此时事务是否需要被关闭呢,不能关闭,一旦关闭,之后的事务就不起使用了。
如果是使用 SessionFactory.openSession() 获得的事务,则与当前托管的事务没有关系,则可以正常使用这个Session对象的事务。
Hibernate 中的 Session
current Session 的绑定。
org.hibernate.context.ThreadLocalSessionContext
Spring MVC 参数映射
自定义参数
在 Controller 层,当参数为对象的时候,Spring MVC 会自动将 req 获取到的参数进行装配。但是有的时候,我们需要自定义这个装配过程。例如在前后端分离的情况下,前台传递过来的参数名称可能和后台的 POJO 的字段名称无法对应。此时就需要自定义这个装配过程。
其方法可以参考: 自定义Spring MVC3的参数映射和返回值映射 + fastjson
自定义返回值
同理,前后端分离的时候,有可以 POJO 对象,已经在代码大量使用了。
而在和前台对接的时候,POJO 的字段名称无法对应,则可以使用下面的注解的来解决。
1 | "name") ( |