Spring jpa事务业务到Dao

发布于 2024-11-30 21:32:53 字数 4328 浏览 1 评论 0原文

业务层:

public class ServiceImpl implements Service{

  @Transactional(readOnly = false)
   public void createOrUpdateAppPing(String s) {

      servicePingDao.createOrUpdateAppPing(s);
   }
}

Dao 层

public   void createOrUpdateAppPing(String sc) {
      EntityManager  entityManager = entityManagerFactory.createEntityManager();    
          pingScService(sc,entityManager);
          if(ifHasPingScConfig(sc,entityManager)) {
             updateScConfig(sc,entityManager);
          } else {
             createScConfig(sc,entityManager);      }
         entityManager.close();    
   }

这里: ** pingScService 有选择查询 ** updateScConfig - 更新查询 ** createScConfig-insert

 config service-datasorce.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:osgi="http://www.springframework.org/schema/osgi"
    xmlns:osgix="http://www.springframework.org/schema/osgi-compendium"
    xmlns:ctx="http://www.springframework.org/schema/context"   
    xsi:schemaLocation="
    http://www.springframework.org/schema/osgi
          http://www.springframework.org/schema/osgi/spring-osgi.xsd
    http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/osgi-compendium 
      http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsd     
       ">

       <bean id="entityManagerFactory"
            class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property name="persistenceUnitName" value="smx4" />
            <property name="jpaVendorAdapter" ref="jpaAdapter" />
            <property name="dataSource" ref="dataSource" />
        </bean>

        <bean id="jpaAdapter"
            class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="databasePlatform" value="com.luthresearch.savvyconnect.model.PostgreSQLDialectUuid" />
            <property name="showSql" value="true" />
            <property name="generateDdl" value="true" />
    </bean> 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">       
            <property name="driverClassName" value="${database.driver.class}" />        
            <property name="url"             value="${database.savvyconnect.url}" />
            <property name="username"        value="${database.savvyconnect.username}" />
            <property name="password"        value="${database.savvyconnect.password}" />

    </bean>



        <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>

  </bean>


  IN service.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:osgi="http://www.springframework.org/schema/osgi"
       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/osgi
                        http://www.springframework.org/schema/osgi/spring-osgi.xsd
                               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">


    <bean id="service"
        class="com.services.impl.SServicempl" autowire="byName">

    </bean>
            <tx:annotation-driven transaction-manager="transactionManager"/>
  </beans>

现在我想在服务层添加事务支持...我该如何做到这一点。

我尝试添加 @Transaction 注释,但我得到

javax.persistence.TransactionRequiredException:执行更新/删除查询

business layer:

public class ServiceImpl implements Service{

  @Transactional(readOnly = false)
   public void createOrUpdateAppPing(String s) {

      servicePingDao.createOrUpdateAppPing(s);
   }
}

Dao layer

public   void createOrUpdateAppPing(String sc) {
      EntityManager  entityManager = entityManagerFactory.createEntityManager();    
          pingScService(sc,entityManager);
          if(ifHasPingScConfig(sc,entityManager)) {
             updateScConfig(sc,entityManager);
          } else {
             createScConfig(sc,entityManager);      }
         entityManager.close();    
   }

here :
** pingScService has select query
** updateScConfig - update query
** createScConfig-insert

 config service-datasorce.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:osgi="http://www.springframework.org/schema/osgi"
    xmlns:osgix="http://www.springframework.org/schema/osgi-compendium"
    xmlns:ctx="http://www.springframework.org/schema/context"   
    xsi:schemaLocation="
    http://www.springframework.org/schema/osgi
          http://www.springframework.org/schema/osgi/spring-osgi.xsd
    http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/osgi-compendium 
      http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsd     
       ">

       <bean id="entityManagerFactory"
            class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property name="persistenceUnitName" value="smx4" />
            <property name="jpaVendorAdapter" ref="jpaAdapter" />
            <property name="dataSource" ref="dataSource" />
        </bean>

        <bean id="jpaAdapter"
            class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="databasePlatform" value="com.luthresearch.savvyconnect.model.PostgreSQLDialectUuid" />
            <property name="showSql" value="true" />
            <property name="generateDdl" value="true" />
    </bean> 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">       
            <property name="driverClassName" value="${database.driver.class}" />        
            <property name="url"             value="${database.savvyconnect.url}" />
            <property name="username"        value="${database.savvyconnect.username}" />
            <property name="password"        value="${database.savvyconnect.password}" />

    </bean>



        <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>

  </bean>


  IN service.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:osgi="http://www.springframework.org/schema/osgi"
       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/osgi
                        http://www.springframework.org/schema/osgi/spring-osgi.xsd
                               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">


    <bean id="service"
        class="com.services.impl.SServicempl" autowire="byName">

    </bean>
            <tx:annotation-driven transaction-manager="transactionManager"/>
  </beans>

Now i want to add transaction support at service layer ...How i can do this.

I tried adding @Transaction annotation but I am getting

javax.persistence.TransactionRequiredException: Executing an update/delete query

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文