为什么仅设置@Entity注释是不够的?
我在这里忽略了这一点(表现?)?
感谢。
答案 0 :(得分:7)
注释是不够的,因为如果没有某种明确的声明,hibernate不会知道带注释的类的存在位置。从理论上讲,它可以扫描类路径中的每个类并查找注释,但对于大型项目来说,这将非常昂贵。
你可以使用带有帮助程序的spring,它可以让你指定你的hibernate对象所在的包,它只会扫描这些包的@Entity。如果您将所有对象都包含在少量固定包中,则效果很好。
E.g。
<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();
它支持一堆配置选项,因此您可以使用原始属性或传入预配置的数据源。
答案 1 :(得分:3)
如果您将hibernate.archive.autodetection
属性设置为true
,则不会。这里存在性能问题,因为Hibernate将在jar文件中搜索JPA注释。请注意,它还会初始化这些类。
答案 2 :(得分:2)
是的:)
hibernate.cfg.xml
文件不用于指定您的实体,它用于配置hibernate的连接参数和全局设置等内容。 hibernate.cfg.xml
文件还包含有关如何查找实体的说明。您可以使用<mapping resource=XYZ>
列出XML映射文件,但如果您使用的是@Entity
等JPA注释,那么这是不必要的,Hibernate会自动检测它们。
如果您愿意,可以 混合注释和映射XML,但在大多数情况下这绝不是必需的。
答案 3 :(得分:1)
默认情况下所有正确注释 找到类和所有hbm.xml文件 存档内部添加到 持久性单元配置。您 可以通过添加一些外部实体 虽然是类元素。