我正在使用Spring事务,因此当POJO到DTO转换发生时事务仍处于活动状态。防止Dozer触发Hibernate延迟加载
我想阻止Dozer触发延迟加载,这样就不会发生隐藏的SQL查询:所有抓取都必须通过HQL明确完成(以获得对性能的最佳控制)。
这是一个很好的做法(我无法在任何地方找到它)吗?
如何安全地做到这一点?
我DTO转换之前试过这样:
PlatformTransactionManager tm = (PlatformTransactionManager) SingletonFactoryProvider.getSingletonFactory().getSingleton("transactionManager");
tm.commit(tm.getTransaction(new DefaultTransactionDefinition()));
我不知道会发生什么交易,但Hibernate的Session不会被关闭,并且延迟加载仍然存在。
我尝试这样做:
SessionFactory sf = (SessionFactory) SingletonFactoryProvider.getSingletonFactory().getSingleton("sessionFactory");
sf.getCurrentSession().clear();
sf.getCurrentSession().close();
,并阻碍了延迟加载,但它是直接在应用层(被称为我的项目“门面”)操纵会话的好的做法呢?我应该害怕哪种负面影响? (我已经看到,涉及POJO - > DTO转换的测试不能再通过AbstractTransactionnalDatasource Spring测试类来启动,因为这些类试图触发对没有更多链接到活动会话的事务的回滚)。
我也尝试将传播设置为NOT_SUPPORTED或REQUIRES_NEW,但它重用了当前的Hibernate会话,并且不会阻止延迟加载。
谢谢,这很好,我甚至可以确认它没有记录在其他地方:http://www.google.fr/search?q=CustomFieldMapper+PersistentSet – Tristan 2011-05-12 05:51:48
此外,在最新版本的Dozer(5.3.0 ),还有另外一种方法可以做到这一点(http://sourceforge.net/tracker/?func=detail&aid=2993122&group_id=133517&atid=727370) – Tristan 2011-05-12 06:03:16
'destination = null'这行是无操作的,不知道为什么在那儿... – 2012-11-19 09:19:45