2009-10-27 4 views
2

Я изучаю Seam и JPA/Hibernate, и хотя я мог найти несколько примеров того, как построить класс DAO с Hibernate, я немного смущен тем, как делать то же самое с Seam (или даже если это вообще необходимо).Как создать класс DAO для Seam/JPA (спящий режим)?

Я действительно знаю, что шов управляет транзакциями, используя свои разговоры, поэтому я не беспокоюсь о том, чтобы совершать/откатывать операции вручную.

Что я до сих пор не получаю, так это то, как расширить объекты EntityHome и EntityList за пределами созданных seam-gen для создания DAO, которые предоставят мне мелкозернистые операции/объединения, которые мне нужны в моем приложении.

Я что-то упустил?

ответ

2

Я знаю, что шов управляет транзакции, используя свои разговоры , так что я не (?) Придется беспокоиться о совершении/отката операций вручную.

Да, вам не нужно беспокоиться об этом, если есть исключение, шов автоматически выполнит откат. То же самое для фиксации, когда нет исключения. Я думаю, вы можете управлять этим вручную тоже с помощью аннотаций шва.

Шаблон DAO создается, когда вам нужно отделить уровень persistencie от бизнес-уровня. EntityHome и EntityList - это точно уровень сохранения. Вам не нужно создавать дао.

Лучший путь для которых начинается с шва - изучите пример, который поставляется с пакетом швов .. см. Примеры, такие как dvdstore и бронирование. они весьма полезны

С уважением,

+0

Спасибо за ввод! Вы имеете в виду, что с помощью EntityHome и EntityList я должен выполнять любую операцию сохранения, которая мне нужна в моем приложении? Или вы каким-либо образом расширяете классы sean-gen? –

+0

Да, используйте entityHome для обновления, удаления и вставки и EntityList для выбора. Но это всего лишь предложение для проектов шва, вы можете добавить менеджера объектов в любой шовный компонент, если хотите. –

1

Другой полезной вещью является EntityQuery или HibernateEntityQuery. Вы задаете свои запросы в XML, а затем можете ссылаться на них как компоненты Seam во всем приложении. Хотя я использую этот очень понравившийся NamedQuery в JPA, я не думаю, что это стандартная практика.

<framework:entity-query name="User_findByEmailAddress" ejbql="SELECT u FROM User u"> 
<framework:restriction> 
    <value>u.emailAddress = #{emailAddress}</value> 
</framework:restriction> 
</framework:entity-query> 

Затем в коде Java вы можете сделать:

@In 
private EntityQuery<User> User_findByEmailAddress; 

... 
Contexts.getEventContext().set("emailAddress", emailAddress); 
User user = User_findByEmailAddress.getSingleResult(); 

Если вы хотите использовать это в вашей странице XHTML, вы можете также использовать его там со встроенной поддержкой пагинацией.

Walter