你如何为 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 测试?

你如何为 iPhone 实现横向启动屏幕?

你如何为 IE 开发插件?

你如何为 Flask 安装 MySQL? [复制]

你如何为 UIImagePickerController 的导航栏着色/自定义?

你如何为不基于文本的东西创建 UIMenuController?