We use Guice Persist to inject EntityManager in our project.
E.g.
public class MyDao{
@Inject
EntityManager em;
public void someMethod(){
//uses em instance
}
}
But it is unclear for us how injected instance of EntityManager
is about to be used.
- What type of EntityManager is this? (see e.g.: types of entity managers) Under the hood Guice Persist instantiates it via
EntityManagerFactory.createEntityManager()
so I'd say it's application-managed entity manager. But in official Wiki they write about seesion-per-transaction strategy, which suggests that EntityManager is (pseudo) transaction-scoped. - Should we invoke close() on it manually? Or Guice will take care of it?
- What is the scope of first level cache? Only single transaction (like in transaction-scoped entity managers) or as long as I use the same injected instance of
EntityManager
(like in application managed entity managers)?