【发布时间】:2015-02-18 15:51:17
【问题描述】:
问题:
entityManager.unwrap(SessionImplementor.class) 导致 no transactional entitymanager available 异常。
代码:
@Component
public class HibernateEventWiring {
@Autowired
private ViewListener listener;
@PersistenceContext(unitName = "config-punit")
private EntityManager entityManager;
@PostConstruct
public void registerListeners() {
SessionFactory sessionFactory = getSessionFactory();
EventListenerRegistry registry = ((SessionFactoryImpl) sessionFactory).getServiceRegistry().getService(
EventListenerRegistry.class);
registry.getEventListenerGroup(EventType.PRE_UPDATE).appendListener(listener);
}
@Transactional
private SessionFactory getSessionFactory() {
// EXCEPTION: No transactional entitymanager available
return entityManager.unwrap(SessionImplementor.class).getFactory();
}
}
【问题讨论】:
-
stackoverflow.com/q/14522691/1391249, stackoverflow.com/q/3423972/1391249 此外,您不应无意中导入
javax.transaction.Transactional(Java EE 7) 来代替org.springframework.transaction.annotation.Transactional。 -
我假设您使用的是 org.springframework.transaction.annotation.Transactional 而不是 javax.transaction.Transactional 注释。这是真的吗?