java - transaksi musim bunga tidak ditarik balik
为情所困
为情所困 2017-05-17 10:07:12
0
2
545

1. Transaksi musim bunga tidak akan ditarik balik Saya telah mencuba semua kaedah dalam talian tetapi tidak berjaya.
2. Konfigurasi adalah seperti berikut:

1.spring.xml:

<context:component-scan base-package="com.szcshl">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

2.springmvc.xml

<context:component-scan base-package="com.szcshl" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

3.spring-hibernate.xml

<!-- 配置事务管理器 -->
    <bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    <!-- 注解方式配置事物 -->
    <!-- <tx:annotation-driven transaction-manager="transactionManager" /> -->

    <!-- 拦截器方式配置事物 -->
    <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="add*" />
            <tx:method name="save*" />
            <tx:method name="update*" />
            <tx:method name="modify*" />
            <tx:method name="edit*" />
            <tx:method name="delete*" />
            <tx:method name="remove*" />
            <tx:method name="repair" />
            <tx:method name="deleteAndRepair" />

            <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
            <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
            <tx:method name="load*" propagation="SUPPORTS" read-only="true" />
            <tx:method name="search*" propagation="SUPPORTS" read-only="true" />
            <tx:method name="datagrid*" propagation="SUPPORTS" read-only="true" />

            <tx:method name="*" propagation="SUPPORTS" read-only="true" />
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <aop:pointcut id="transactionPointcut" expression="execution(* com.szcshl.service..*Impl.*(..))" />
        <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" />
    </aop:config>

4.pengawal

 @RequestMapping(value = "/Save" , method= RequestMethod.POST)
    public void departmentSave(Department department, HttpServletResponse response){
            departmentService.save(department);
            throw new RuntimeException("抛出异常");
    }

5.perkhidmatan

@Service
@Transactional
public class DepartmentServiceImpl extends BaseServiceImpl<Department> implements DepartmentService {
    
    @Autowired
    private DepartmentDao deptDao;

    ......

    public void save(Department entity) {
        deptDao.save(entity);
    }
}

6.baseDao

public class BaseDaoImpl<T> implements BaseDao<T> {

    private SessionFactory sessionFactory;
    protected Class<T> entityClass;

    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    @Resource
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public Session getCurrentSession() {
        return this.sessionFactory.getCurrentSession();
    }

    @SuppressWarnings("rawtypes")
    protected Class getEntityClass() {
        if (entityClass == null) {
            entityClass = (Class<T>) ((ParameterizedType) getClass()
                    .getGenericSuperclass()).getActualTypeArguments()[0];
        }
        return entityClass;
    }

    @Transactional
    public Serializable save(T entity) {
        return this.getCurrentSession().save(entity);

    }
    ......
}

Struktur direktori:

Tolong minta tolong pada Tuhan Saya telah menyesuaikannya selama sehari.

为情所困
为情所困

membalas semua(2)
伊谢尔伦

Melihat padanya, anda menguruskan urus niaga pada antara muka perkhidmatan, bukan pengawal
Pengecualian yang anda lemparkan adalah dalam pengawal, sudah tentu transaksi tidak akan ditarik balik

Anda cuba menyimpannya dalam kelas pelaksanaan perkhidmatan dan kemudian membuang pengecualian untuk melihat sama ada simpanan berjaya atau tidak

PS: mysql mempunyai dua enjin storan (biasa digunakan), satu ialah InnoDB dan satu lagi ialah MyISAM yang pertama menyokong kunci peringkat baris, transaksi dan kunci asing, manakala yang kedua tidak menyokong

.
大家讲道理

Apa yang anda katakan di atas adalah betul Transaksi musim bunga bertindak pada lapisan perkhidmatan Apabila kaedah perkhidmatan mengeluarkan pengecualian, transaksi akan ditarik balik. Jadi amalan ujian anda yang betul ialah membuang pengecualian dalam kaedah lapisan perkhidmatan.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan