gpt4 book ai didi

spring - 没有 Guice/Spring 的 JPA 交易痛苦更少

转载 作者:行者123 更新时间:2023-12-05 00:34:55 25 4
gpt4 key购买 nike

Spring 和 Guice-persist 都允许 @Transactional对访问数据库的方法的注释,以在未打开时自动创建事务,在方法返回时提交,在异常时回滚等。

有没有办法在 OSGi 应用程序中不使用 Spring 或 Guice 来获得相同的东西(或类似地可用)?

最佳答案

即使在 Guice/Spring @Transactional 容器中运行时,我也经常使用以下代码片段:

public void transact(Runnable runnable) {
EntityTransaction tx = em.getTransaction();
boolean success = false;
tx.begin();
try {
runnable.run();
success = true;
} finally {
if (success) {
tx.commit();
} else {
tx.rollback();
}
}
}

public <T> T transact(Callable<T> callable) throws Exception {
EntityTransaction tx = em.getTransaction();
boolean success = false;
tx.begin();
try {
T result = callable.call();
success = true;
return result;
} finally {
if (success) {
tx.commit();
} else {
tx.rollback();
}
}
}

用法:
dao.transact(new Runnable() {
public void run() {
// do stuff in JPA
}
});

Long count = dao.transact(new Callable<Long>() {
public Long call() {
return em.createQuery("select count(*) from Foo", Long.class)
.getSingleResult();
}
});

它非常轻巧,可以完成工作。

关于spring - 没有 Guice/Spring 的 JPA 交易痛苦更少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10141553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com