你如何为 Seam / JPA (hibernate) 创建一个 DAO 类?
Posted
技术标签:
【中文标题】你如何为 Seam / JPA (hibernate) 创建一个 DAO 类?【英文标题】:How do you create a DAO class for Seam / JPA (hibernate)? 【发布时间】:2010-12-10 08:59:33 【问题描述】:我正在学习 Seam 和 JPA/Hibernate,虽然我可以找到一些关于如何使用 Hibernate 构建 DAO 类的示例,但我对如何使用 Seam 做同样的事情有点困惑(或者即使那是在所有必要的)。
我知道 seam 使用它的对话来管理事务,所以我不必(?)担心手动提交/回滚操作。
我仍然不明白如何将 EntityHome 和 EntityList 对象扩展到 seam-gen 生成的对象之外,以创建 DAO,为我提供我在应用程序中需要的细粒度操作/连接。
我错过了什么吗?
【问题讨论】:
【参考方案1】:我知道 seam 管理 使用其对话进行交易 所以我不必(?)担心 提交/回滚 手动操作。
是的,你不用担心,如果出现异常,seam 会自动回滚。当没有异常时,提交也是一样的。我认为您也可以使用接缝注释手动控制。
DAO 模式是在您需要将持久层与业务层分开时创建的。 EntityHome 和 EntityList 正是持久层。你不需要创建一个 dao。
从 seam 开始的最佳途径是研究 seam 包附带的示例 .. 参见 dvdstore 和 booking 等示例。他们很有帮助
问候,
【讨论】:
感谢您的意见!您的意思是使用 EntityHome 和 EntityList 我应该能够在我的应用程序中执行我需要的任何持久性操作吗?或者你是否以任何方式扩展了 sean-gen 类? 是的,使用 entityHome 进行更新、删除和插入,使用 EntityList 进行选择。但这只是对seam项目的建议,如果你愿意,你可以在任何seam组件中注入实体管理器。【参考方案2】:另一个有用的东西是 EntityQuery 或 HibernateEntityQuery。您可以在 XML 中指定查询,然后可以在整个应用程序中将它们作为 Seam 组件引用。尽管我在 JPA 中使用了这个非常受欢迎的 NamedQuery,但我认为这不是标准做法。
<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 页面中使用它,你也可以在那里使用它并内置对分页的支持。
沃尔特
【讨论】:
以上是关于你如何为 Seam / JPA (hibernate) 创建一个 DAO 类?的主要内容,如果未能解决你的问题,请参考以下文章
你如何为 getInitialProps 编写 Jest 测试?