简体   繁体   中英

Save method not persisting entity object Spring Data JPA

I am moving my current code from hibernate and mybatis to spring data jpa.I configured spring data with my existing application and tried to perform certain operations.

When I tried to persist an entity using save(T t) it didn't return any exception and returned same entity object as result but didn't persist.

Persistence.xml

<context:annotation-config />

<tx:annotation-driven />

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    p:driverClassName="com.mysql.jdbc.Driver" p:url="${db.url}"
    p:username="${db.username}" p:password="${db.password}" />

<!-- Hibernate 4 SessionFactory Bean definition -->
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan">
        <list>
            <value>com.moneyhaul.dao.model</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
</bean>

<!--<tx:annotation-driven transaction-manager="transactionManager" />-->
<!--
          Configure Spring Data JPA and set the base package of the
          repository interfaces
        -->
<jpa:repositories base-package="com.moneyhaul.repositary"/>


    <!-- Create default configuration for Hibernate -->
    <bean id="hibernateJpaVendorAdapter"
          class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>

    <!-- Configure the entity manager factory bean -->
    <bean id="entityManagerFactory"
          class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/>
        <!-- Set JPA properties -->
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                <prop key="javax.persistence.schema-generation.database.action">none</prop>
                <prop key="hibernate.ejb.use_class_enhancer">false</prop>
            </props>
        </property>
        <!-- Set base package of your entities -->
        <property name="packagesToScan" value="com.moneyhaul.dao.model"/>
        <!-- Set share cache mode -->
        <property name="sharedCacheMode" value="ENABLE_SELECTIVE"/>
        <!-- Set validation mode -->
        <property name="validationMode" value="NONE"/>

    </bean>

    <!-- Configure the transaction manager bean -->
    <bean id="transactionManagerJpa"
          class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>

    <!-- Enable annotation driven transaction management -->
    <tx:annotation-driven transaction-manager="transactionManagerJpa"/>









<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- Mybatis session factory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
    p:dataSource-ref="dataSource" p:configLocation="WEB-INF/mybatis/sqlmap-config.xml" />

<bean id="caarmoMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"
    p:mapperInterface="com.caarmo.mapper.CaarmoMapper"
    p:sqlSessionFactory-ref="sqlSessionFactory" />

<bean id="paymentMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"
    p:mapperInterface="com.caarmo.mapper.PaymentMapper"
    p:sqlSessionFactory-ref="sqlSessionFactory" />

<bean id="reportingMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"
    p:mapperInterface="com.caarmo.mapper.ReportingMapper"
    p:sqlSessionFactory-ref="sqlSessionFactory" />

<bean id="reportingTrendsMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"
    p:mapperInterface="com.caarmo.mapper.ReportingTrendsMapper"
    p:sqlSessionFactory-ref="sqlSessionFactory" />

<bean id="customerDBMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"
    p:mapperInterface="com.caarmo.mapper.CustomerDBMapper"
    p:sqlSessionFactory-ref="sqlSessionFactory" />

<bean id="vehicleDBMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"
    p:mapperInterface="com.caarmo.mapper.VehicleDBMapper"
    p:sqlSessionFactory-ref="sqlSessionFactory" />

<bean id="geomaticsMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"
    p:mapperInterface="com.caarmo.mapper.GeomaticsMapper"
    p:sqlSessionFactory-ref="sqlSessionFactory" />

<bean id="serviceCenterMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"
    p:mapperInterface="com.caarmo.mapper.ServiceCenterMapper"
    p:sqlSessionFactory-ref="sqlSessionFactory" />

<bean id="moneyhaulMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"
    p:mapperInterface="com.moneyhaul.mapper.MoneyHaulMapper"
    p:sqlSessionFactory-ref="sqlSessionFactory" />

<bean id="mhGeomaticsMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"
    p:mapperInterface="com.moneyhaul.mapper.MHGeomaticsMapper"
    p:sqlSessionFactory-ref="sqlSessionFactory" />

<bean id="configurationMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"
    p:mapperInterface="com.caarmo.mapper.ConfigurationMapper"
    p:sqlSessionFactory-ref="sqlSessionFactory" />

DriverRepositary.java

@Repository
public interface DriverRepositary extends CrudRepository<Driver,Long>{}

Persisting entity

@Transactional
public void addDriver(Driver driver) {
    driver.setTabletPassword(setDriverPassword(driver.getPhone()));
    driver.setUpdated(new Date());
    driverRepositary.save(driver);

}

Can you just check the following :

  1. There are two Transaction Manager Bean which are declared. Are they required?
  2. Why do you need session factory bean declaration ?
  3. Set the hibernate.show_sql to true as part of JPA Properties (for debugging)
  4. Are explicitly setting the primary key OR are you using a sequence?

Also if possible provide all the logs available from server startup till this error point for any further analysis.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM