为什么仅设置@Entity注释还不够?
我在这里遗漏了重点吗?性能?
最佳答案
注释是不够的,因为如果没有某种显式声明,hibernate便无法知道带注释的类的位置。从理论上讲,它可以扫描类路径中的每个类并查找注释,但这对于大型项目而言非常昂贵。
您可以使用spring,它具有一个帮助程序,该帮助程序可以让您指定休眠对象所在的程序包,它将仅扫描这些程序包中的@Entity。如果将所有对象放在少量固定的包装中,则效果很好。
例如。
<bean id="referenceSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan">
<array>
<value>com.xxx.hibernate.objects</value>
</array>
</property>
</bean>
以上是Spring声明。如果您不熟悉上述语法,则可以通过编程方式构造它。
AnnotationSessionFactoryBean sfb = new AnnotationSessionFactoryBean();
sfb.setDataSource( ds );
sfb.setHibernateProperties( hibProps);
sfb.setPackagesToScan( ... );
sfb.initialise();
SessionFactory sf = sfb.getObject();
它支持许多配置选项,因此您可以使用原始属性或传入预先配置的数据源。