ERROR: HHH000299: Could not complete schema update java.lang.NullPointerException

后端 未结 4 1682
庸人自扰
庸人自扰 2021-01-06 06:05

I have a web application in the following environment.

  • JPA 2.0
  • Spring 3.2.2
  • MySQL 5.6.11
  • Hibernate 4.2.0 CR1
  • Apache Tomca
相关标签:
4条回答
  • 2021-01-06 06:08

    It looks like you're incorrectly mixing Hibernate dialects and databases. In your original issue you have a MySQL database and a dialect of org.hibernate.dialect.HSQLDialect (see first code block below).

    In your solution you have the MySQL database and the correct dialect of org.hibernate.dialect.MySQL5Dialect (see second code block below).

    If you had changed the databasePlatform in the original to be the MySQL dialect it would have worked as well.


    Original:

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      ...
      <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
          ...
          <property name="databasePlatform" value="org.hibernate.dialect.HSQLDialect"/>
        </bean>
      </property>
      ...
    </bean>
    

    Working:

    <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
      <persistence-unit name="WebAppPU" transaction-type="RESOURCE_LOCAL">
        ...
        <properties>
          ...
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>      
          ...
        </properties>
      </persistence-unit>
    </persistence>
    
    0 讨论(0)
  • 2021-01-06 06:09

    The problem in question vanished, when I insisted upon using a JNDI lookup. Accordingly, in the context.xml file, I have defined a resource like,

    <?xml version="1.0" encoding="UTF-8"?>
    <Context antiJARLocking="true" path="/WebApp">
        <Resource name="jdbc/social_networking" 
                  auth="Container"
                  type="javax.sql.DataSource"
                  maxActive="100"
                  maxIdle="30"
                  maxWait="10000"
                  username="root"
                  password="root"
                  driverClassName="com.mysql.jdbc.Driver"
                  url="jdbc:mysql://localhost:3306/social_networking"/>
    </Context>
    

    The resource reference needs to be defined in the web.xml file like,

    <resource-ref>
        <res-ref-name>jdbc/social_networking</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
    

    This datasource is referenced in the the persistence.xml file as follows.

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
      <persistence-unit name="WebAppPU" transaction-type="RESOURCE_LOCAL">
      <!--<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>-->
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <non-jta-data-source>java:comp/env/jdbc/social_networking</non-jta-data-source>
        <class>model.Test</class>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
    
        <properties>
          <property name="hibernate.connection.datasource" value="java:comp/env/jdbc/social_networking"/>
          <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>      
          <property name="hibernate.show_sql" value="true" />
          <property name="hibernate.format_sql" value="true" />
          <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>
        </properties>
      </persistence-unit>
    </persistence>
    

    And finally the application-context.xml file has been modified as follows.

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:jee="http://www.springframework.org/schema/jee"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
           http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
           http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    
        <context:component-scan base-package="admin.mangedbean converter" use-default-filters="false">
            <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
            <context:include-filter expression="org.springframework.web.bind.annotation.ControllerAdvice" type="annotation"/>  
        </context:component-scan>
        <mvc:annotation-driven/>
        <context:annotation-config/>
    
        <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>            
        <bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory" >
            <property name="jpaProperties">
                <props>
                    <prop key="hibernate.enable_lazy_load_no_trans">false</prop>
                    <!-- I use fetch joins or queries/subqueries with a desired/required list of columns only for lazily loaded collections, when they are required to be fetched from outside of an active transaction boundary.
                         Therefore it is set to false. -->
                </props>
            </property>
    
            <property name="jpaPropertyMap">
                <map>
                  <entry key="eclipselink.weaving" value="false"/>
                </map>
            </property>
    
            <property name="loadTimeWeaver">
                <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
            </property>
        </bean>
    
        <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
            <property name="entityManagerFactory" ref="entityManagerFactory"/>
        </bean>
    
        <tx:annotation-driven transaction-manager="transactionManager"/>
    
        <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName" value="java:comp/env/jdbc/social_networking"/>
        </bean>
    
        <!--Bean registration-->
        <bean id="testService" class="admin.dao.TestDAO"/>
    </beans>
    
    0 讨论(0)
  • 2021-01-06 06:14

    In my case, the reason was that the disk was out of space.

    I have an instance on OpenShift, and first JDBC started throwing some exception because MySQL was down, filling the logs with garbage, and that filled the disk in the end.

    0 讨论(0)
  • 2021-01-06 06:21

    Please check if the table for entity exist.

    If it exist then you get error for the below property.

    <property name="hibernate.hbm2ddl.auto" value="update"/>
    

    Change it to

    <property name="hibernate.hbm2ddl.auto" value="create"/>
    

    This will create the new entity table.

    0 讨论(0)
提交回复
热议问题