java - 作为消费者参数的 Lambda 表达式无法正常工作
问题描述
我想通过 JPA 创建保存和删除方法。我发现使用执行事务的通用方法会很棒。
但是我的代码似乎不像我预期的那样工作(我想我可能在消费者逻辑上犯了一个错误?):
class MyClass {
private EntityManager entityManager;
MyClass() {
entityManager = Persistence.createEntityManagerFactory("persistence-unit")
.createEntityManager();
}
public void save(MyObj obj) {
executeInsideTransaction(entityManager -> entityManager.persist(obj));
}
public void delete(MyObj obj) {
executeInsideTransaction(entityManager -> entityManager.remove(obj));
}
private void executeInsideTransaction(Consumer<EntityManager> action) {
EntityTransaction transaction = entityManager.getTransaction();
try {
transaction.begin();
action.accept(entityManager);
transaction.commit();
} catch (RuntimeException e) {
transaction.rollback();
logger.error("Transaction at MyClass went wrong and was rolled back! {}", e);
}
}
public static void main(String[] args) {
MyObj obj = new MyObj();
MyClass myClass = new MyClass();
myClass.save(obj); // it does nothing
}
它既不会抛出任何异常,也不会将对象持久化/删除到数据库中。
解决方案
推荐阅读
- ruby-on-rails - Action Mailer 的问题
- codenameone - 在 PropertyBusinessObject 中存储任意对象
- .net - 如何将 SQLite 数据库中的文本与文本文件中本地保存的某些文本进行比较?
- java - Android:选择了水平日历错误的日期
- c++ - 在模板类中定义的枚举上嵌套类的部分特化
- css - 绑定的 JavaFX 属性可以被 CSS 修改吗?
- magento - 面对我网站上的滑块的响应问题
- webpack - 带有 preact-cli 和 ssr 的 unistore
- javascript - React.JS 奇怪的错误:按钮随滚动而移动
- python - 从python中的rss提要中提取以关键字/短语开头的句子