@Transactional 用于事务管理的类或方法,而 spring 使用 packagesToScan 扫描实体类上的注释
<property name="packagesToScan">
<list>
<value>com.xyz.EntityName</value>
</list>
</property>
我在我的 DaoImpl 方法 (CRUD) 上使用了 @Transactional,并在实体上使用了 packagesToScan 以供 spring 选择。
当你使用 spring 和 hibernate 时,它是 spring 类的责任,即 org.springframework.orm.hibernate4.LocalSessionFactoryBean
如<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
而不是 Hibernate 的新 Configuration().configure().buildSessionFactory()
此外,在 hibernate 中,您使用
告诉 hibernate 考虑使用注释的实体,就像在 hibrnate.cfg.xml 中一样
<mapping class="com.hiber.hr.Countries"/>
<mapping class="com.hiber.hr.Departments"/>
同样你需要通过 packagesToScan 属性告诉 spring。
Spring 内部调用了 Hibernate 的 org.hibernate.cfg.Configuration 类的 addAnnotatedClass 方法
从 Spring 调用的 Hibernate 方法:-
public Configuration addAnnotatedClass(Class annotatedClass)
{
XClass xClass = reflectionManager.toXClass(annotatedClass);
metadataSourceQueue.add(xClass);
return this;
}