Java Hibernate 4.3加载所有hbm文件,即使它们';re未在持久性单元中声明
我正在尝试使用以下配置为带有JPA和Spring 4的hibernate 4.3配置测试:Java Hibernate 4.3加载所有hbm文件,即使它们';re未在持久性单元中声明,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我正在尝试使用以下配置为带有JPA和Spring 4的hibernate 4.3配置测试: <bean id="em" class="LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="jpaVendorAdapter"> <bea
<bean id="em" class="LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="persistenceXmlLocation"
value="classpath:integrations/hibernate4/jpa/persistence.xml" />
</bean>
现在,持久性配置如下所示:
<persistence-unit name="test" >
<class>hibernate4.jpa.JpaEntity</class>
<class>hibernate4.jpa.JpaHiLoEntity</class>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create" />
</properties>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
</persistence-unit>
hibernate4.jpa.jpa实体
hibernate4.jpa.jpa
真的
如果我在hibernate 4.2.4中运行上述程序,一切都会正常运行,但是在4.3中,上述设置会加载所有hbm.xml资源文件,其中一些文件引用类路径上不存在的类,从而导致ClassNotFoundException
是否有人知道更改行为的原因以及如何停止hibernate扫描hbm.xml文件(packagesToScan属性也不起作用)?此外,您还可以配置bean
em
,而无需使用文件persistence.xml
。e、 g:
<bean id="em"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="dataSource"
p:packagesToScan="···.model">
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
p:showSql="false"
p:databasePlatform="org.hibernate.dialect.SQLServerDialect" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
真的
您还可以配置beanem
,而无需使用文件persistence.xml
。e、 g:
<bean id="em"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="dataSource"
p:packagesToScan="···.model">
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
p:showSql="false"
p:databasePlatform="org.hibernate.dialect.SQLServerDialect" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
真的
如果您的类在要扫描的包中,则排除未列出的类
不起作用,例如,您想注册它,但不想为它使用hbm.xml
我修复了使用hibernate属性hibernate.archive.autodetection
设置为class
,使hibernate只扫描类而不扫描映射文件的问题
<properties>
<property name="hibernate.archive.autodetection" value="class" />
</properties
如果您的类在要扫描的包中,例如,您希望注册它,但不希望使用hbm.xml,则排除未列出的类
不起作用
我修复了使用hibernate属性hibernate.archive.autodetection
设置为class
,使hibernate只扫描类而不扫描映射文件的问题
<properties>
<property name="hibernate.archive.autodetection" value="class" />
</properties
我也遇到了这个问题。hibernate.archive.autodetection属性控制hibernate将自动扫描的内容:
如果属性未定义,则将包括hbm文件,并将包括注释类,除非
设置为true
如果属性的值包含“hbm”,则将包括.hbm.xml文件。否则他们就不会
如果该值包含“class”,则将包括类路径上任何带注释的类。否则他们就不会
如果定义了属性,不管其值如何,它都会影响Hibernate的行为。请参阅org.hibernate.jpa.boot.scan.internal.StandardScanOptions构造函数
出于我的目的,我需要持久性单元只包含在
元素中显式列出的实体。为了实现这一点,我定义了一个值为“none”的属性:
...
...
不幸的是,我能找到的关于这个属性的唯一文档是,不管是什么。Hibernate 4.3的文档中没有提到它,但这是我使用的版本,我可以确认该属性正常工作。我也遇到了这个问题。hibernate.archive.autodetection属性控制hibernate将自动扫描的内容:
如果属性未定义,则将包括hbm文件,并将包括注释类,除非
设置为true
如果属性的值包含“hbm”,则将包括.hbm.xml文件。否则他们就不会
如果该值包含“class”,则将包括类路径上任何带注释的类。否则他们就不会
如果定义了属性,不管其值如何,它都会影响Hibernate的行为。请参阅org.hibernate.jpa.boot.scan.internal.StandardScanOptions构造函数
出于我的目的,我需要持久性单元只包含在
元素中显式列出的实体。为了实现这一点,我定义了一个值为“none”的属性:
...
...
不幸的是,我能找到的关于这个属性的唯一文档是,不管是什么。Hibernate4.3的文档中没有提到它,但这是我使用的版本,我可以确认该属性可以正常工作