mybatisスプリングトランザクション管理を使用しようとしています 私の問題は、例外がスローされてもトランザクションがコミットされていることです。 これに比較的新しいですが、何かの助けがありがたいです。 次のコードはspring mybatisトランザクションのコミット
スプリングXML構成
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:Config.properties</value>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.user}"/>
<property name="password" value="${db.pass}"/>
<property name="defaultAutoCommit" value="false" />
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:Configuration.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<bean class="org.mybatis.spring.SqlSessionTemplate" id="sqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory"/>
</bean>
サービスクラス
@Transactional(rollbackFor = Exception.class、伝播= Propagation.REQUIRED) 公共ボイドinsertNotes(文字列noteTypeId、文字列のスニペットでありますString noteType、String noteTypeValue、 文字列claimNumber、文字列notepadId、文字列モード) {
NotepadExample notepadExample= new NotepadExample();
//to be moved into dao class marked with transaction boundaries
Notepad notepad = new Notepad();
notepad.setAddDate(new Date());
notepad.setAddUser("DummyUser");
if("true".equalsIgnoreCase(confidentialValue))
confidentialValue="Y";
else
confidentialValue="N";
notepad.setConfidentiality(confidentialValue);
Long coverageId=getCoverageId(claimNumber);
notepad.setCoverageId(coverageId);
notepad.setDescription(summaryValue);
notepad.setEditUser("DmyEditUsr");
//notepad.setNotepadId(new Long(4)); //auto sequencing
System.out.println(notes);
notepad.setNotes(notes);
notepad.setNoteType(noteTypeValue); //Do we really need this?
notepad.setNoteTypeId(Long.parseLong(notesId));
if("update".equalsIgnoreCase(mode))
{
notepad.setNotepadId(new Long(notepadId));
notepad.setEditDate(new Date());
notepadMapper.updateByPrimaryKeyWithBLOBs(notepad);
}
else
notepadMapper.insertSelective(notepad);
throw new java.lang.UnsupportedOperationException();
}
ない私が間違っているつもり場所がわから...
@Controller
public class NotesController {
private static final Logger logger = LoggerFactory
.getLogger(NotesController.class);
@Autowired
private Utils utility;
@Autowired
NotepadService notepadService;
public @ResponseBody List<? extends Object> insertNotes(HttpServletRequest request,
HttpServletResponse response,@RequestParam("noteTypeValue") String noteTypeId,
@RequestParam("confidentialValue")String confidentialValue,
@RequestParam("summaryValue")String summaryValue,
@RequestParam("notes")String notes ,
@RequestParam("notesId")String notesId,
@RequestParam("noteTypeValue")String noteTypeValue,
@RequestParam("claimNumber")String claimNumber,
@RequestParam("notepadId")String notepadId,
@RequestParam("mode")String mode) {
try {
notepadService.insertNotes(noteTypeId, confidentialValue, summaryValue, notes, notesId, noteTypeValue, claimNumber, notepadId, mode);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
こんにちは、私はそれを呼び出しています、現在の方法をinsertNotes呼び出す前に、すべてのパラメータが最終確認する必要があります – user1163585
コードをservice.Doingへのコントローラ呼び出しで更新したのと同じように私は推測します。 – user1163585