クロージャを渡され、トランザクション内で実行される小さなトランザクションヘルパーを作成しました。
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))
しかし、コンパイラは私にこう言います:
メソッドaddの引数が不十分です:(暗黙のentityManager:javax.persistence.EntityManager、暗黙のアイテム:models.Item)Unit。不特定の値のパラメータ項目。
パラメータを明示的に渡すと、すべてが機能します。
Transaction.execute(em => ItemRepository.add(em, item))
ここで何が問題になっていますか?この回答とほとんど同じように見えます。