我写了一个小事务助手,它通过闭包并在事务中执行它:
object Transaction {
val emf = Persistence.createEntityManagerFactory("defaultPersistenceUnit")
def execute(action: EntityManager => Unit) {
val em = emf.createEntityManager()
em.getTransaction.begin()
action(em)
em.getTransaction.commit()
em.close()
}
}
然后我有一个ItemRepository
这样的:
object ItemRepository {
def add(implicit entityManager: EntityManager, item: Item) {
entityManager.persist(item)
}
}
最后,我想使用隐式传递的 EntityManager 执行存储库方法:
Transaction.execute(implicit em => ItemRepository.add(item))
但是编译器告诉我:
方法添加的参数不足:(隐式 entityManager:javax.persistence.EntityManager,隐式项目:models.Item)Unit。未指定值参数项。
如果我明确传递参数,一切正常:
Transaction.execute(em => ItemRepository.add(em, item))
这里有什么问题?它看起来与此答案中的几乎相同。