| | 166 | * 手动开启JPA事务的问题 |
| | 167 | {{{ |
| | 168 | 有些定时任务中使用了 |
| | 169 | EntityTransaction et = EnvUtils.getEnv().getEm().getTransaction(); |
| | 170 | et.begin() |
| | 171 | //数据库操作 |
| | 172 | et.commit() |
| | 173 | 这样的事务处理,在oracle版本中运行正常,但在postgresql上抛 |
| | 174 | java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or |
| | 175 | EJB CMT instead |
| | 176 | 异常,初步估计和驱动有关,换成以下写法正常 |
| | 177 | final EntityManager em = EnvUtils.getEnv().getEm(); |
| | 178 | TransactionTemplate tt = EnvUtils.getEnv().getTransactionTemplate(); |
| | 179 | tt.execute(new TransactionCallbackWithoutResult() { |
| | 180 | public void doInTransactionWithoutResult(TransactionStatus status) { |
| | 181 | try { |
| | 182 | //数据库操作 |
| | 183 | } catch (Exception ex) { |
| | 184 | ex.printStackTrace(); |
| | 185 | status.setRollbackOnly(); |
| | 186 | } |
| | 187 | } |
| | 188 | }); |
| | 189 | }}} |
| | 190 | |