在ssh项目中,事务处理放在哪一层比较好,service还是DAO层上???我把spring的事务放在service层上,可是在做添加记录时出现了问题。
1.在保存对账文件时需要检查是否有同时期的记录已经存在
2.如果有相同记录,先删除然后在添加新的记录
现在的问题是新数据没办法添加,旧的数据删除不掉,报的错误是违反了唯一约束。
代码如下:
public class CPBillServiceImpl implements ICPBillService { private ICPBillDAO cpBillDAO; public void setCpBillDAO(ICPBillDAO cpBillDAO) {
this.cpBillDAO = cpBillDAO;
} /**
* 保存对账文件
* */
public CPBill saveCPBill(CPBill cpBill){
CPBill cp = this.cpBillDAO.getCPBillByInfo(cpBill);
if(cp != null)
this.cpBillDAO.deleteCPBill(cp); }
this.cpBillDAO.save(cpBill);
return cpBill;
}
}
1.在保存对账文件时需要检查是否有同时期的记录已经存在
2.如果有相同记录,先删除然后在添加新的记录
现在的问题是新数据没办法添加,旧的数据删除不掉,报的错误是违反了唯一约束。
代码如下:
public class CPBillServiceImpl implements ICPBillService { private ICPBillDAO cpBillDAO; public void setCpBillDAO(ICPBillDAO cpBillDAO) {
this.cpBillDAO = cpBillDAO;
} /**
* 保存对账文件
* */
public CPBill saveCPBill(CPBill cpBill){
CPBill cp = this.cpBillDAO.getCPBillByInfo(cpBill);
if(cp != null)
this.cpBillDAO.deleteCPBill(cp); }
this.cpBillDAO.save(cpBill);
return cpBill;
}
}
解决方案 »
- vista ->cmd->命令拒绝访问
- 用过LazyValidatorForm的朋友帮忙,使用 LazyValidatorForm 验证多文件上载异常。
- javax.transaction.RollbackException EJB事务提交报错
- 从哪儿能找到JPETSHOP的资料,尤其是JPETSHOP的例子...
- 关于Hibernate的几个问题
- java reflect问题 一个关于Class和valueObject的问题
- <html:link page="del.do" onClick = "question()" >问题?????
- 大家帮我看看jsp连不上数据库是怎么回事?
- TomcAT做了一个免费看点影的网站访问量一打就整站崩溃!!!可我查看系统内存没占多少,怎么办呀!!TOMCAT是不是个垃圾还是我不会用呀!
- 关于地址值
- ssh的流程问题
- JMX监控过JBOSS服务器(取JBOSS服务器基本信息以及运行时候的性能信息) 要代码例子
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/com/server/zzc/model</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.jdbc.batch_size">50</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.autoReconnect">true</prop>
</props>
</property>
</bean> <!-- ******************************************************* -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean> <!-- ********************************************************** --> <bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="do*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean> <bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*Service</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<!-- ********************************************************** -->
<import resource="zzc/daoContext.xml" />
<import resource="zzc/serviceContext.xml" />
daoContext.xml内容:
<beans>
<bean id="cpBillDAO" class="com.server.zzc.dao.impl.CPBillDAOImpl" autowire="byName"></bean>
</beans>serviceContext.xml内容:
<beans>
<bean id="cpBillService" class="com.server.zzc.service.impl.CPBillServiceImpl">
<property name="cpBillDAO" ref="cpBillDAO"/>
<property name="checkRecordDAO" ref="checkRecordDAO"/>
</bean>
</beans>
代码:
public class CPBillServiceImpl implements ICPBillService {
private ICPBillDAO cpBillDAO; public void setCpBillDAO(ICPBillDAO cpBillDAO) {
this.cpBillDAO = cpBillDAO;
} public CPBill saveCPBill(CPBill cpBill){
CPBill cp = this.cpBillDAO.getCPBillByInfo(cpBill);
if(cp != null){
this.cpBillDAO.deleteCPBill(cp);
}
this.cpBillDAO.save(cpBill);
return cpBill;
}
}
你可以根据这个字段查数据库如果返回list不为空则删除list,然后再插入新的数据