关于hibernate中一对一关联时,从方不能实现延迟加载好对帖子里都讲到了,关键是 外键列是在从方表中的,由从方指向主方,加载主方时必须要查询从方表才能知道对应的从方是否存在。
引用关于one-to-one关联的从方不能lazy loading是由one-to-one的机制造成的,比如user和contact是一对一,user是主,contact是从,约束依赖于user,那么在数据库中,contact表中应该有一个外键字段指向user表的主键。
当加载contact对象时,从contact表的记录中就可以得到user记录的id,这和多对一是一样的,就可以知道user对象是否存在,不存在则 ...
- 09:38
- 浏览 (519)
- 评论 (0)
最近程序中用到子类继承,一个超类Task,有几个子类如 EntryTask和GroupTask,对应同一张数据库表,用一个discriminator字段来区分是哪一个子类。
在需要判断hibernate返回的对象是哪一个子类时遇到麻烦,如果返回的不是代理对象,使用if(task instanceof EntryTask)这样的语句就可以,但是如果是代理对象就有问题了,因为其他地方有对Task的多对一关联,并且关联处指定的父类肯定是Task超类,不会去指定具体哪个子类,这样一旦延迟加载生成的是Task类的代理对象。
该对象只instanceof Task类,而不是它的任何子类,即使在加载了实 ...
探讨一下spring拦截器中的数据库操作和事务管理。
大家知道spring中的事务管理是通过AOP代理来实现的,对被代理对象的每个方法进行拦截,在方法执行前启动事务,方法执行完后根据是否有异常和异常的种类进行提交或回滚。
如果要在方法执行前或后或抛出异常后加上一个自己的拦截器,或者一个环绕拦截器,在拦截器中执行一些操作,比如执行一些数据库操作,记录一些信息,这些操作通过调用一个服务类的方法来执行,这个方法也在spring事务管理拦截器的管理之下,那么这个记录方法需要在另一个事务中进行,而不是与被拦截方法在同一个事务中,不然如果被拦截方法抛出异常需要回滚时,所作的记录也会被回滚,当然有时候确实 ...







评论排行榜