为什么我在使用注释时必须在hibernate.cfg.xml中声明每个类?

Mis*_*erY 7 java annotations hibernate

为什么仅设置@Entity注释是不够的?

我错过了这一点(表现?)?

谢谢.

Mik*_*e Q 7

注释是不够的,因为如果没有某种显式声明,hibernate不会知道带注释的类的位置.理论上,它可以扫描类路径中的每个类并查找注释,但对于较大的项目,这将非常昂贵.

您可以使用带有帮助程序的spring,它可以让您指定hibernate对象所在的程序包,它只会扫描这些程序包以获取@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>
Run Code Online (Sandbox Code Playgroud)

以上是Spring声明.如果您不熟悉上述语法,则可以通过编程方式构建它.

AnnotationSessionFactoryBean sfb = new AnnotationSessionFactoryBean();
sfb.setDataSource( ds );
sfb.setHibernateProperties( hibProps);
sfb.setPackagesToScan( ... );
sfb.initialise();
SessionFactory sf = sfb.getObject();
Run Code Online (Sandbox Code Playgroud)

它支持一堆配置选项,因此您可以使用原始属性或传入预配置的数据源.