У меня есть пара вопросов относительно использования диспетчера сущностей в среде JavaSE.JPA 2 - Использование EntityManager в JavaSE - несколько вопросов
Я использую шаблон репозитория для выполнения операций CRUD в базе данных. Там будет базовый класс хранилище так:
public class Repository<T> implements IRepository<T> {
private EntityManager em;
private String persistenceUnitName;
public Repository(String persistenceUnitName) {
this.persistenceUnitName = persistenceUnitName;
}
@Override
public T find(Class<T> type, Object id) {
return em.find(type, id);
}
private EntityManager getEntityManager() {
if (this.em == null) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnitName);
em = emf.createEntityManager();
}
return em;
}
...
...
}
Я тогда есть классы, как EmployeeRepository, которые унаследуют Repository. Эти классы репозитория будут созданы на моем уровне обслуживания.
Это хороший способ инициализации менеджера объектов? Я начинаю думать, что это не так - похоже, у вас должен быть только один менеджер сущностей на единицу персистентности? Где, как в этом случае, у вас будет менеджер сущности для каждого созданного вами репозитория ... Как бы вы поделились тем, что у вас есть только один менеджер сущностей на единицу персистентности? Кроме того, я заметил, что у фабричных менеджеров и методов фабричного менеджера есть метод close - когда их следует называть? На сервере прекращается событие?
Если вы знаете какие-либо хорошие источники об использовании JPA в JavaSE, я был бы признателен за информацию.
Спасибо!
Я немного опаздываю на это, но знаете ли вы, что если вы используете стойкость, управляемую контейнером, и вы просматриваете блок персистентности своим именем JNDI, указанным в: (т.е. EntityManager manager = (EntityManager) context.lookup (jndiName);), состоит в том, что EM возвращал фактически новый EM каждый раз? Это EMF за сценой, выкачивающей EMs, или это просто глобальная EM, связанная с одним потоком? –
djb