Как создать класс DAO для Seam / JPA (спящий режим)? - PullRequest
2 голосов
/ 27 октября 2009

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

Я знаю, что seam управляет транзакциями, используя свои разговоры, поэтому мне не нужно (?) Беспокоиться о фиксации / откате операций вручную.

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

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

Ответы [ 2 ]

2 голосов
/ 27 октября 2009

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

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

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

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

С уважением,

1 голос
/ 31 декабря 2009

Другая полезная вещь - это 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

...