【问题标题】:how to save data with save method of jpa Repository如何使用 jpa Repository 的 save 方法保存数据
【发布时间】:2017-08-04 07:39:16
【问题描述】:

在将实体从服务实现类添加到 Repository 接口时,它显示成功消息但数据没有插入到数据库中,我从 JpaRepository 接口调用 save(entity) 方法。它不显示任何错误消息,而是显示成功插入记录的消息。

控制器 --- >>.

@Controller
@RequestMapping("/cart")
public class CartController {

    @Autowired
    CartService cartServices;

    /**
     * Get All records in Cart
     *  
     * @return All Cart List
     */
    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public @ResponseBody List<Cart> getCart() {

        List<Cart> cartList = null;
        try {
            cartList = cartServices.getCartList();
if(cartList.isEmpty())
{
    System.out.println("List is empty ");
}
        } catch (Exception e) {
            e.printStackTrace();
        }

        return cartList;
    }
    /**
     * Add Cart
     * 
     * @param representative
     * @return Status
     */
    @RequestMapping(value = "/create", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
    public @ResponseBody Status addCart(@RequestBody Cart cart) {
        System.out.println("i m from jpa controller");
        try {
            cartServices.save(cart);
            return new Status(1, "Cart added Successfully !");
        } catch (Exception e) {
            // e.printStackTrace();
            return new Status(0, e.toString());
        }

    }

服务实现类------>>>>

@Service
public class CartServiceImpl implements CartService {


    @Inject
    CartRepository cartRepository;


    /**
     * Get All Cart
     * 
     * @throws Exception
     * @return All Cart List
     */

    @Override
    @Transactional
    public List<Cart> getCartList() throws Exception {
        // TODO Auto-generated method stub
        return cartRepository.findAll();
    }

    /**
     * Add Cart
     * 
     * @param cart
     * @throws Exception
     * @return Boolean
     */
    @Override
    @Transactional
    public Cart save(Cart cart) throws Exception {
        System.out.println("i m from jpa Service");


        Cart cart1 = cartRepository.save(cart);
        return    cart1;
    }

存储库接口-------->>>>

package com.xptraining.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.xptraining.model.Cart;


@Repository
public interface CartRepository extends JpaRepository<Cart, Long>
{


}

Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>xptraining</display-name>
  <servlet>
  <servlet-name>mvc-dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/rest.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>mvc-dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
 </servlet-mapping>

</web-app>

rest.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:util="http://www.springframework.org/schema/util" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd  
  http://www.springframework.org/schema/data/jpa 
  http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

 <context:component-scan base-package="com.xptraining" />
  <jpa:repositories base-package="com.xptraining.repository"
                  entity-manager-factory-ref="entityManagerFactoryBean"
                  transaction-manager-ref="txManager"/>
 <!--  <jpa:repositories base-package="com.xptraining.repository"></jpa:repositories> -->
<!-- <jpa:repositories base-package="com.xptraining.repository"
                  entity-manager-factory-ref="cartRepository"
                  transaction-manager-ref="transactionManager"/>  -->

    <mvc:annotation-driven />

<bean id="entityManagerFactoryBean" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <!-- This makes /META-INF/persistence.xml is no longer necessary -->
      <property name="packagesToScan" value="com.xptraining.model" />
      <!-- JpaVendorAdapter implementation for Hibernate EntityManager.
           Exposes Hibernate's persistence provider and EntityManager extension interface -->
      <property name="jpaVendorAdapter">
         <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
      </property>
      <property name="jpaProperties">
         <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
         </props>
      </property>
   </bean>
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/training" />
        <property name="username" value="root" />
        <property name="password" value="xpointers" />
    </bean>

    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="annotatedClasses">
            <list>
                <value>com.xptraining.model.Product</value>
                <value>com.xptraining.model.Specialties</value>
                <value>com.xptraining.model.Representative</value>
                <value>com.xptraining.model.Cart</value>
                <value>com.xptraining.model.Sku</value>
                <value>com.xptraining.model.Order</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
            </props>
        </property>
    </bean>
    <bean id="txManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <bean id="persistenceExceptionTranslationPostProcessor"
        class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

    <bean id="dataDao" class="com.xptraining.dal.impl.DataDaoImpl"></bean>
    <bean id="dataServices" class="com.xptraining.services.impl.DataServicesImpl"></bean>
    <bean id="specialtiesDao" class="com.xptraining.dal.impl.SpecialtiesDaoImpl"></bean>
    <bean id="specialtiesServices" class="com.xptraining.services.impl.SpecialtiesServicesImpl"></bean>
    <bean id="representativeDao" class="com.xptraining.dal.impl.RepresentativeDaoImpl"></bean>
    <bean id="representativeService" class="com.xptraining.services.impl.RepresentativeServiceImpl"></bean>
    <bean id="skuDao" class="com.xptraining.dal.impl.SkuDaoImpl"></bean>
    <bean id="skuServices" class="com.xptraining.services.impl.SkuervicesImpl"></bean>
    <bean id="cartDao" class="com.xptraining.dal.impl.CartDaoImpl"></bean>
    <bean id="cartServices" class="com.xptraining.services.impl.CartServiceImpl"></bean>
    <bean id="orderDao" class="com.xptraining.dal.impl.OrderDaoImpl"></bean>
    <bean id="orderServices" class="com.xptraining.services.impl.OrderServicesImpl"></bean>

</beans>

@我的控制台当我调用保存方法时

10:48:55.219 [http-nio-8080-exec-10] DEBUG org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'mvc-dispatcher' processing POST request for [/xptraining/cart/create]
10:48:55.220 [http-nio-8080-exec-10] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /cart/create
10:48:55.220 [http-nio-8080-exec-10] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Returning handler method [public com.xptraining.model.Status com.xptraining.controller.CartController.addCart(com.xptraining.model.Cart)]
10:48:55.220 [http-nio-8080-exec-10] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'cartController'
10:48:55.220 [http-nio-8080-exec-10] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor - Read [class com.xptraining.model.Cart] as "application/json" with [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@48e069ed]
i m from jpa controller
i m from jpa Service
10:48:55.220 [http-nio-8080-exec-10] DEBUG org.springframework.orm.hibernate4.HibernateTransactionManager - Creating new transaction with name [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
10:48:55.220 [http-nio-8080-exec-10] DEBUG org.springframework.orm.hibernate4.HibernateTransactionManager - Opened new Session [SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=org.hibernate.engine.spi.ExecutableList@23b8bcb1 updates=org.hibernate.engine.spi.ExecutableList@2d7f56b6 deletions=org.hibernate.engine.spi.ExecutableList@2940d7c1 orphanRemovals=org.hibernate.engine.spi.ExecutableList@6c425c8d collectionCreations=org.hibernate.engine.spi.ExecutableList@a793880 collectionRemovals=org.hibernate.engine.spi.ExecutableList@5d64159f collectionUpdates=org.hibernate.engine.spi.ExecutableList@72b52f2d collectionQueuedOps=org.hibernate.engine.spi.ExecutableList@c6da3c2 unresolvedInsertDependencies=UnresolvedEntityInsertActions[]])] for Hibernate transaction
10:48:55.220 [http-nio-8080-exec-10] DEBUG org.springframework.orm.hibernate4.HibernateTransactionManager - Preparing JDBC Connection of Hibernate Session [SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=org.hibernate.engine.spi.ExecutableList@23b8bcb1 updates=org.hibernate.engine.spi.ExecutableList@2d7f56b6 deletions=org.hibernate.engine.spi.ExecutableList@2940d7c1 orphanRemovals=org.hibernate.engine.spi.ExecutableList@6c425c8d collectionCreations=org.hibernate.engine.spi.ExecutableList@a793880 collectionRemovals=org.hibernate.engine.spi.ExecutableList@5d64159f collectionUpdates=org.hibernate.engine.spi.ExecutableList@72b52f2d collectionQueuedOps=org.hibernate.engine.spi.ExecutableList@c6da3c2 unresolvedInsertDependencies=UnresolvedEntityInsertActions[]])]
10:48:55.220 [http-nio-8080-exec-10] DEBUG org.hibernate.engine.jdbc.internal.LogicalConnectionImpl - Obtaining JDBC connection
10:48:55.220 [http-nio-8080-exec-10] DEBUG org.springframework.jdbc.datasource.DriverManagerDataSource - Creating new JDBC DriverManager Connection to [jdbc:mysql://localhost:3306/training]
10:48:55.223 [http-nio-8080-exec-10] DEBUG org.hibernate.engine.jdbc.internal.LogicalConnectionImpl - Obtained JDBC connection
10:48:55.223 [http-nio-8080-exec-10] DEBUG org.hibernate.engine.transaction.spi.AbstractTransactionImpl - begin
10:48:55.223 [http-nio-8080-exec-10] DEBUG org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction - initial autocommit status: true
10:48:55.223 [http-nio-8080-exec-10] DEBUG org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction - disabling autocommit
10:48:55.223 [http-nio-8080-exec-10] DEBUG org.springframework.orm.hibernate4.HibernateTransactionManager - Exposing Hibernate transaction as JDBC transaction [com.mysql.jdbc.JDBC4Connection@5c26bcfd]
10:48:55.224 [http-nio-8080-exec-10] DEBUG org.springframework.orm.jpa.EntityManagerFactoryUtils - Opening JPA EntityManager
10:48:55.224 [http-nio-8080-exec-10] DEBUG org.springframework.orm.jpa.EntityManagerFactoryUtils - Registering transaction synchronization for JPA EntityManager
10:48:55.224 [http-nio-8080-exec-10] DEBUG org.hibernate.loader.Loader - Loading entity: [com.xptraining.model.Cart#1]
10:48:55.224 [http-nio-8080-exec-10] DEBUG org.hibernate.SQL - select cart0_.cart_id as cart_id1_0_0_, cart0_.prize as prize2_0_0_, cart0_.quantity as quantity3_0_0_, cart0_.representative_id as represen4_0_0_, cart0_.sku_id as sku_id5_0_0_ from cart cart0_ where cart0_.cart_id=?
10:48:55.224 [http-nio-8080-exec-10] DEBUG org.hibernate.engine.jdbc.internal.LogicalConnectionImpl - Obtaining JDBC connection
10:48:55.224 [http-nio-8080-exec-10] DEBUG org.springframework.jdbc.datasource.DriverManagerDataSource - Creating new JDBC DriverManager Connection to [jdbc:mysql://localhost:3306/training]
10:48:55.226 [http-nio-8080-exec-10] DEBUG org.hibernate.engine.jdbc.internal.LogicalConnectionImpl - Obtained JDBC connection
10:48:55.226 [http-nio-8080-exec-10] DEBUG org.hibernate.loader.Loader - Result set row: 0
10:48:55.226 [http-nio-8080-exec-10] DEBUG org.hibernate.loader.Loader - Result row: EntityKey[com.xptraining.model.Cart#1]
10:48:55.227 [http-nio-8080-exec-10] DEBUG org.hibernate.engine.internal.TwoPhaseLoad - Resolving associations for [com.xptraining.model.Cart#1]
10:48:55.227 [http-nio-8080-exec-10] DEBUG org.hibernate.engine.internal.TwoPhaseLoad - Done materializing entity [com.xptraining.model.Cart#1]
10:48:55.227 [http-nio-8080-exec-10] DEBUG org.hibernate.loader.Loader - Done entity load
10:48:55.227 [http-nio-8080-exec-10] DEBUG org.springframework.orm.jpa.EntityManagerFactoryUtils - Closing JPA EntityManager
10:48:55.227 [http-nio-8080-exec-10] DEBUG org.hibernate.engine.jdbc.internal.LogicalConnectionImpl - Releasing JDBC connection
10:48:55.227 [http-nio-8080-exec-10] DEBUG org.hibernate.engine.jdbc.internal.LogicalConnectionImpl - Released JDBC connection
10:48:55.227 [http-nio-8080-exec-10] DEBUG org.springframework.orm.hibernate4.HibernateTransactionManager - Initiating transaction commit
10:48:55.227 [http-nio-8080-exec-10] DEBUG org.springframework.orm.hibernate4.HibernateTransactionManager - Committing Hibernate transaction on Session [SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=org.hibernate.engine.spi.ExecutableList@23b8bcb1 updates=org.hibernate.engine.spi.ExecutableList@2d7f56b6 deletions=org.hibernate.engine.spi.ExecutableList@2940d7c1 orphanRemovals=org.hibernate.engine.spi.ExecutableList@6c425c8d collectionCreations=org.hibernate.engine.spi.ExecutableList@a793880 collectionRemovals=org.hibernate.engine.spi.ExecutableList@5d64159f collectionUpdates=org.hibernate.engine.spi.ExecutableList@72b52f2d collectionQueuedOps=org.hibernate.engine.spi.ExecutableList@c6da3c2 unresolvedInsertDependencies=UnresolvedEntityInsertActions[]])]
10:48:55.227 [http-nio-8080-exec-10] DEBUG org.hibernate.engine.transaction.spi.AbstractTransactionImpl - committing
10:48:55.227 [http-nio-8080-exec-10] DEBUG org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction - committed JDBC Connection
10:48:55.227 [http-nio-8080-exec-10] DEBUG org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction - re-enabling autocommit
10:48:55.227 [http-nio-8080-exec-10] DEBUG org.springframework.orm.hibernate4.HibernateTransactionManager - Closing Hibernate Session [SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=org.hibernate.engine.spi.ExecutableList@23b8bcb1 updates=org.hibernate.engine.spi.ExecutableList@2d7f56b6 deletions=org.hibernate.engine.spi.ExecutableList@2940d7c1 orphanRemovals=org.hibernate.engine.spi.ExecutableList@6c425c8d collectionCreations=org.hibernate.engine.spi.ExecutableList@a793880 collectionRemovals=org.hibernate.engine.spi.ExecutableList@5d64159f collectionUpdates=org.hibernate.engine.spi.ExecutableList@72b52f2d collectionQueuedOps=org.hibernate.engine.spi.ExecutableList@c6da3c2 unresolvedInsertDependencies=UnresolvedEntityInsertActions[]])] after transaction
10:48:55.227 [http-nio-8080-exec-10] DEBUG org.hibernate.engine.jdbc.internal.LogicalConnectionImpl - Releasing JDBC connection
10:48:55.227 [http-nio-8080-exec-10] DEBUG org.hibernate.engine.jdbc.internal.LogicalConnectionImpl - Released JDBC connection
10:48:55.228 [http-nio-8080-exec-10] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor - Written [com.xptraining.model.Status@788e053b] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@48e069ed]
10:48:55.228 [http-nio-8080-exec-10] DEBUG org.springframework.web.servlet.DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'mvc-dispatcher': assuming HandlerAdapter completed request handling
10:48:55.228 [http-nio-8080-exec-10] DEBUG org.springframework.web.servlet.DispatcherServlet - Successfully completed request

【问题讨论】:

  • 你怎么知道它没有被保存?方法返回时,cart 是否获得了 ID?
  • @chrylis 我将其检入数据库,值未保存,但它显示成功消息
  • 在调用save 之前或之后向您显示成功消息? (你有一个日志语句之前。)你得到一个分配的ID吗?
  • 在调用 save 方法后我得到了那个消息,hibernate 没有创建插入查询它创建一个选择查询,我会更新有问题的。谢谢
  • 看起来您可能是手动设置 ID 而不是让 JPA 生成它。

标签: java spring hibernate spring-data-jpa


【解决方案1】:

您已经在 rest.xml 中定义了 Hibernate 会话工厂和 JPA 实体管理器。只使用一个。请参考以下答案。

Saving entity in repository does not work SPRING

【讨论】:

    【解决方案2】:

    您是否在 rest.xml 中添加了以下行

    <repositories base-package="com.acme.repositories" />
    

    如果不尝试添加上面的行。它将设置 Spring 为这些接口创建代理实例。

    【讨论】:

    猜你喜欢
    • 2020-03-22
    • 2020-12-11
    • 2018-07-29
    • 2020-07-22
    • 1970-01-01
    • 2021-01-19
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多