看源码里有 @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); } }
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于