最近程序中用到子类继承,一个超类Task,有几个子类如 EntryTask和GroupTask,对应同一张数据库表,用一个discriminator字段来区分是哪一个子类。 在需要判断hibernate返回的对象是哪一个子类时遇到麻烦,如果返回的不是代理对象,使用if(task instanceof EntryTask)这样的语句就可以,但是如果是代理对象就有问题了,因为其他地方有对Task的多对一关联,并且关联处指定的父类肯定是Task超类,不会去指定具体哪个子类,这样一旦延迟加载生成的是Task类的代理对象。 该对象只instanceof Task类,而不是它的任何子类,即使在加载了实 ...
探讨一下spring拦截器中的数据库操作和事务管理。 大家知道spring中的事务管理是通过AOP代理来实现的,对被代理对象的每个方法进行拦截,在方法执行前启动事务,方法执行完后根据是否有异常和异常的种类进行提交或回滚。 如果要在方法执行前或后或抛出异常后加上一个自己的拦截器,或者一个环绕拦截器,在拦截器中执行一些操作,比如执行一些数据库操作,记录一些信息,这些操作通过调用一个服务类的方法来执行,这个方法也在spring事务管理拦截器的管理之下,那么这个记录方法需要在另一个事务中进行,而不是与被拦截方法在同一个事务中,不然如果被拦截方法抛出异常需要回滚时,所作的记录也会被回滚,当然有时候确实 ...
janh
搜索本博客
博客分类
最近加入圈子
最新评论
评论排行榜