Spring与Hibernate调整自动扫描时的陷阱

Spring与Hibernate整合自动扫描时的陷阱
在配置Hibernate+Spring时,使用了Spring 2.5.6的自动包扫描(packagesToScan)功能。

这个功能可以自动扫描包中的实体类,避免书写annotatedClasses的麻烦。但在使用这个功能时,我一直遇到类似这样的错误:

Caused by: org.hibernate.MappingException: Unknown entity: com.mycompany.app.model.Users

Spring中的配置是:

	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					${hibernate.dialect}
				</prop>
				<prop key="hibernate.show_sql">
					${hibernate.show_sql}
				</prop>
				<prop key="hibernate.jdbc.fetch_size">
					${hibernate.jdbc.fetch_size}
				</prop>
				<prop key="hibernate.jdbc.batch_size">
					${hibernate.jdbc.batch_size}
				</prop>
				<prop key="hibernate.c3p0.timeout">
					${hibernate.c3p0.timeout}
				</prop>
			</props>
		</property>
		<property name="packagesToScan" value="com.mycompany.app.model.*" />
	</bean>

但是我的实体类明明在com.mycompany.app.model下,为何扫描不到呢?

后来仔细查看文档发现,packagesToScan的value应该配置成com.mycompany.app.*才行,也就是Entity所在包的上一层。这真是一个令人匪夷所思的陷阱啊!