看源码里有 @Transactional 方式,也有编码的方式,想问下使用方式上有什么区别?什么时候用声明式,什么时候用编码的方式
命令式事务
public String userGenInvitecode(final String userId, final String userName) {
final Transaction transaction = invitecodeRepository.beginTransaction();
try {
final String ret = RandomStringUtils.randomAlphanumeric(16);
final JSONObject invitecode = new JSONObject();
invitecode.put(Invitecode.CODE, ret);
invitecode.put(Invitecode.MEMO, "User [" + userName + "," + userId + "] generated");
invitecode.put(Invitecode.STATUS, Invitecode.STATUS_C_UNUSED);
invitecode.put(Invitecode.GENERATOR_ID, userId);
invitecode.put(Invitecode.USER_ID, "");
invitecode.put(Invitecode.USE_TIME, 0);
invitecodeRepository.add(invitecode);
transaction.commit();
return ret;
} catch (final RepositoryException e) {
if (transaction.isActive()) {
transaction.rollback();
}
LOGGER.log(Level.ERROR, "Generates invitecode failed", e);
return null;
}
}
声明式事务
@Transactional
public void addReportHandledNotification(final JSONObject requestJSONObject) throws ServiceException {
try {
requestJSONObject.put(Notification.NOTIFICATION_DATA_TYPE, Notification.DATA_TYPE_C_POINT_REPORT_HANDLED);
addNotification(requestJSONObject);
} catch (final RepositoryException e) {
final String msg = "Adds a notification [type=report_handled] failed";
LOGGER.log(Level.ERROR, msg, e);
throw new ServiceException(msg);
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于