【问题标题】:Error Spring and hibernate错误 Spring 和休眠
【发布时间】:2018-11-08 14:06:14
【问题描述】:

我运行项目时,会建好数据库,但不会保存数据。 我使用 Postgre 数据库。 添加 Spring 和 Hibernate 以及 Postgre 库。

感谢您帮助我解决问题。

我的代码

public class PersonManager extends HibernateDaoSupport {

    public void RegisterPerson()
    {
        Person person = new Person();
        person.setId(0);
        person.setName("ali");
        person.setFamily("eslami");
       getHibernateTemplate().saveOrUpdate(person);
    }



    public static void main (String[] arg0)
    {
        BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("beans.xml"));
        PersonManager aa = (PersonManager) beanFactory.getBean("p");
        aa.RegisterPerson();
    }


    }

bean.xml

    <?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:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">



        <bean id="driverManagerDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="org.postgresql.Driver" />
            <property name="url"  value="jdbc:postgresql://127.0.0.1:5432/db44" />
            <property name="username" value="login" />
            <property name="password" value="123456" />
        </bean>


    <bean id="localSessionFactoryBean" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

         <property name="dataSource" ref="driverManagerDataSource"/>
       <property name="mappingResources">
       <list>
       <value>model/to/person.hbm.xml</value>
       </list>
       </property>

           <property name="hibernateProperties">
       <props>
      <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
      <prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>
      <prop key="hibernate.hbm2ddl.auto">create-drop</prop>


    <prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>

       </props>
           </property>  
    </bean>



    <bean id="p" class="model.bl.PersonManager">
    <property  name="sessionFactory" ref="localSessionFactoryBean" />
    </bean>
      </beans>  

** 我在终端中的错误**

May 30, 2018 12:46:14 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [beans.xml]
May 30, 2018 12:46:14 AM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
INFO: Loaded JDBC driver: org.postgresql.Driver
May 30, 2018 12:46:14 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.3.0.CR2}
May 30, 2018 12:46:14 AM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
May 30, 2018 12:46:15 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.0.3.Final}
May 30, 2018 12:46:16 AM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
May 30, 2018 12:46:16 AM org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl makeLobCreatorBuilder
INFO: HHH000422: Disabling contextual LOB creation as connection was null
May 30, 2018 12:46:16 AM org.hibernate.type.BasicTypeRegistry register
INFO: HHH000270: Type registration [java.util.UUID] overrides previous : org.hibernate.type.UUIDBinaryType@ead359
May 30, 2018 12:46:16 AM org.hibernate.type.spi.TypeConfiguration$Scope setSessionFactory
WARN: HHH000233: Scoping types to session factory org.hibernate.internal.SessionFactoryImpl@84f433 after already scoped org.hibernate.internal.SessionFactoryImpl@84f433
May 30, 2018 12:46:17 AM org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSources
INFO: HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@13c0293'
Exception in thread "main" java.lang.NoSuchMethodError: org.hibernate.Session.getFlushMode()Lorg/hibernate/FlushMode;
    at org.springframework.orm.hibernate4.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1127)
    at org.springframework.orm.hibernate4.HibernateTemplate$16.doInHibernate(HibernateTemplate.java:685)
    at org.springframework.orm.hibernate4.HibernateTemplate.doExecute(HibernateTemplate.java:341)
    at org.springframework.orm.hibernate4.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:309)
    at org.springframework.orm.hibernate4.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:682)
    at model.bl.PersonManager.RegisterPerson(PersonManager.java:24)
    at model.bl.PersonManager.main(PersonManager.java:33)

我使用 Postgre 数据库。 id 添加 Spring 和 Hibernate 以及 Postgre 库。

感谢您帮助我解决问题。

【问题讨论】:

  • 也许更多地描述问题,而不是重复复制相同的文本。

标签: java spring hibernate jsp servlets


【解决方案1】:
NoSuchMethodError: org.hibernate.Session.getFlushMode()Lorg/hibernate/FlushMode

上述错误表示org.hibernateSession类中的方法getFlushMode()不存在。

hibernate-entitymanager 已在 Hibernate 5.2.0 中删除,而是移至 hibernate-core,由于您使用的是 5.3.0,这就解释了为什么会出现上述错误。

Spring 4.3.0.RELEASE + Hibernate 5.2.0.Final + JPA Repository

将 hibernate 降级到 5.1.0 应该可以解决您的问题。

或者,您可以使用getHibernateFlushMode 代替getFlushMode,如Hibernate's 5.2 Migration Guide 中所述:

Session#getFlushMode 和 Query#getFlushMode 在以下方面发生冲突 Hibernate (FlushMode) 和 JPA (FlushModeType) 返回。 #getFlushMode 已更改为返回 JPA 的 FlushModeType。冬眠 FlushMode 仍可通过#getHibernateFlushMode 和#setHibernateFlushMode 使用。 Session#getFlushMode 和 EntityManager#getFlushMode 相同。

【讨论】: