我试图理解为什么在某些情况下我需要使用@Transactional,让我们看看。
如果我在没有@Transactional注释的情况下使用此方法,则日志返回jboss:“自己关闭连接。为您关闭连接”。
public void doSomething() {
((Session) em.getDelegate()).doWork(new Work() {
@Transactional(TransactionPropagationType.NEVER)
public void execute(Connection connection) throws SQLException {
StringBuilder sqlSP = new StringBuilder();
sqlSP.append("{ call ");
sqlSP.append("myprocedure");
sqlSP.append("(?)}");
connection.setReadOnly(true);
CallableStatement cs = connection.prepareCall(sqlSP.toString());
cs.setInt(1, 1020);
cs.execute();
//FORCE A EXCEPTION and JBOSS SHOW "Closing connection for you"
throw new MyException("FATAL ERROR");
}
});
}
但是当我把“@Transactional”问题消失时,我不明白为什么。有人可以解释一下吗?
答案 0 :(得分:1)
处理数据库调用的标准方法是: 1.打开连接 2.开放会话和/或交易 做的事情 4.关闭交易和/或关系 5.密切联系
这基本上就是那个注释对你有什么作用;)我强烈建议学习更多关于用这些东西去除的东西。