2009-10-27 38 views
2

我正在学习Seam和JPA/Hibernate,同时我可以找到一些关于如何使用Hibernate构建DAO类的例子,我对Seam如何做同样的事情感到困惑(或者即使那样必要)。如何为Seam/JPA(休眠)创建DAO类?

我知道seam使用它的对话来管理事务,所以我不需要担心手动提交/回滚操作。

我还没有得到的是如何将EntityHome和EntityList对象扩展到由seam-gen生成的对象之外,以创建DAO,以便在我的应用程序中为我提供细粒度的操作/连接。

我错过了什么吗?

回答

2

我确实知道,缝利用其谈话 所以我不(?)不用担心 提交/手动回滚 运营管理 交易。

是的,你不需要担心,如果有异常,seam会自动做回滚。当没有异常时提交同样的东西。我想你也可以用接缝注释手动控制它。

当您需要将persistencie层与业务层分开时,会创建DAO模式。 EntityHome和EntityList正是持久层。你不需要创建一个道。

接缝开始的最佳路径是研究带接缝包的示例。请参阅dvdstore和预订等示例。他们是相当有帮助的

问候,

+0

感谢您的意见!你的意思是使用EntityHome和EntityList我应该可以在我的应用程序中执行任何持久性操作?或者你是否以任何方式扩展了西恩课程? – 2009-10-27 18:40:46

+0

是的,使用entityHome进行更新,删除和插入以及EntityList进行选择。但是,这只是对接缝项目的建议,如果需要,您可以将实体管理器注入到任何接缝组件中。 – 2009-10-28 13:35:00

1

的其他有用的东西是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页面使用这个,你也可以有内置的支持分页使用它。

Walter