hibernate - 如何在 Java EE Spring JSF 应用程序中组织支持 bean 和实体类

标签 hibernate spring jakarta-ee

我正在尝试使用 JSF 2、Spring 和 Hibernate 创建一个 Java EE Web 应用程序。我对这个堆栈相当陌生,因此我需要一些有关组织应用程序的最佳实践的帮助。

我的最初目标很简单,用户登录,并且她的 session 在她注销之前不会关闭。这是我到目前为止所想出的:

  • 用户实体类,用@Entity注释以便持久化。未注册为 JSF 或托管 Bean。具有私有(private)字段(姓名等)和访问器的简单 POJO。

  • DAO 与 User 类交互的接口(interface):getUserById()、saveUser() 等。

  • DAO 的实现。使用 Spring 的 @Repository 和 Hibernate 的 SessionFactory @Autowired 进行标记,并通过组件扫描添加到 ApplicationContext 中。

现在,对于浏览该网站的用户,我认为我不应该从我的 User 类创建 session 范围的 bean,对吗?我认为最好的做法是永远不要直接接触 User 类,而只能通过 DAO 来接触。

那么,我是否需要另一个 bean UserManaged(可能是 ManagedBean 和 session 范围)来复制 User 类的字段?并在我的 JSF 文件中使用它?那么,用户与网站交互时创建的 beans 用户应该由 JSF 处理,其余的由 Spring 处理?但是,这种重复是否会破坏 DRY 原则,因为它与另一个 UserManaged 类中的 User 具有相同的字段?

最佳答案

我一直喜欢对 Hibernate/JPA 实体和 JSF bean 使用不同的对象,从而解耦不同的层并为对象提供不同的上下文。它还避免了 ORM 的附加/分离问题,让我拥有一个解耦的面向服务的架构。

但是,如果我真的想使用 JSF 和 Hibernate 来实现这一点,我会避免在 beans 中使用注释:

  • 使用不带注释的 Hibernate,保留映射信息 在映射 xml 文件中。
  • 将 JSF 2 与包含有关 JSF bean 的所有信息的 xml 文件结合使用。

因此,我在类中既没有任何持久性信息,也没有任何 JSF 信息,并且我可以在两个层中使用相同的对象。

关于hibernate - 如何在 Java EE Spring JSF 应用程序中组织支持 bean 和实体类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7818224/

相关文章:

java - cucumber 步 Spring Bean

java - 如何在 Hibernate 中创建 INSERT IGNORE 查询?

mysql - 更改 spring jpa 现有表列类型

java - Spring是否可以为ehcache添加新的值(value)?

java - 为什么我们需要 Java 应用服务器

eclipse 错误 : glassfish\domains\domain1 does not exist

java.lang.illegalstateException无法检索entitymanagerfactory的unitname null

java - Hibernate Criteria API - 如何获取对象属性列表

hibernate - 查询 hasMany 关系的属性

java - spring Autowiring 依赖项注入(inject)失败