Является ли JPA частью EJB 3.0?
Да и нет ... Да , поскольку каждый сервер приложений, претендующий на реализацию спецификации EJB 3.0, также должен обеспечивать реализацию JPA. Нет , поскольку JPA может легко находиться вне EJB, в автономных приложениях или в приложениях, управляемых Spring.
JPA манипулирует объектными компонентами?
Бины сущностей была страшной идеей в EJB до 3.0. JPA использует термин лица , чтобы отличить себя от позорной истории. Но да, сущности JPA - это способ сопоставить таблицы базы данных с простыми объектами Java. В принципе, изменения, внесенные в объект, распространяются на базу данных и наоборот (упрощение).
Как я уже сказал, JPA не имеет никакой зависимости от EJB (рассматриваемого как сессионные компоненты без сохранения состояния и состояния) и наоборот. Но ничто не мешает вам использовать JPA в EJB.
В вашем сценарии у вас будет EJB без состояния, создающий запрос и взаимодействующий с базой данных через JPA. Технически говоря, вы будете вызывать методы для EntityManager
, введенные вашему бину:
@Stateless
public class SearchService {
@PersistenceContext
private EntityManager em;
public List<User> findUsersBornAfter(Date date) {
return em.
createQuery("SELECT u FROM User u WHERE u.birthDate > :birthDate ORDER BY name").
setParameter("birthDate", date).
getResultList();
}
}
Как вы можете видеть, бизнес-уровень осведомлен о модели данных (очевидно), но в отношении сущностей нет зависимости от EJB / бизнес-сервисов. В этом примере JPQL (запрос) формируется на уровне сервиса, а User
является сущностью JPA. При вызове getResultList()
провайдер JPA переводит JPQL в SQL, запускает запрос и переводит результаты обратно в User
экземпляров объекта.
Граница между EJB и JPA теперь ясна?