Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate 4.3加载所有hbm文件,即使它们';re未在持久性单元中声明_Java_Spring_Hibernate_Jpa - Fatal编程技术网

Java Hibernate 4.3加载所有hbm文件,即使它们';re未在持久性单元中声明

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

我正在尝试使用以下配置为带有JPA和Spring 4的hibernate 4.3配置测试:

<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>

真的

您还可以配置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>

真的

如果您的类在要扫描的包中,则
排除未列出的类
不起作用,例如,您想注册它,但不想为它使用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的文档中没有提到它,但这是我使用的版本,我可以确认该属性可以正常工作