为什么仅设置@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();

它支持许多配置选项,因此您可以使用原始属性或传入预先配置的数据源。

08-03 22:18