有一段时间我一直在写很多非常类似的重载。也许我做错了什么或者只是不知道某些语言功能以使其更紧凑。
public void foo(Object bar){
try(Transaction tx = persistence.createTransaction()){
foo(bar,persistence.getEntityManager());
tx.commit();
}
}
public void foo(Object bar,EntityManager em)/*...*/
这似乎是原始的,我相信必须有一种方法来包含我不知道的类似方法。
答案 0 :(得分:2)
这就是你要找的东西吗?
@FunctionalInterface
public interface TransactionRunnable {
void runTransactionCode(EntityManager em);
}
public void runInNewTransaction(TransactionRunnable code) {
try(Transaction tx = persistence.createTransaction()){
code.runTransactionCode(persistence.getEntityManager());
tx.commit();
}
}
public void foo(Object bar, EntityManager em) { /*...*/ }
public void baz(String str, EntityManager em) { /*...*/ }
然后可以使用
在其自己的事务中调用FoorunInNewTransaction((em) -> foo(myBar, em));
......同样......
runInNewTransaction((em) -> baz("hello", em));
显然,可以更改TransactionRunnable
接口,以便其方法在需要时声明异常。