在 Spring 和 Hibernate 中结合 DAO 和实体

Combine DAO and Entity in Spring and Hibernate

我想知道是否可以将 DAO 和实体合并到一个 class 中。例如

在rails

如果我有 table 命名为 user 那么就会有一个 ActiveRecord 用户,通过使用那个 class 我可以访问与数据库和用户相关的访问方法,即它有两种方法user.name(访问对象属性)和 user.save / User.get_all 方法(管理数据库交互)在同一个 class

在Spring/Hibernate配置中

我有两个东西:DAO 和 Entity

实体: 我有用户 class,它是一个实体并将 Table 映射为 POJO,因此我可以访问与单个相关的方法用户例如user.getName()

DAO: 我有一个 DAO,其中有数据库交互,例如userDAO.save(user)userDAO.get(id).

问题:

我想知道我是否可以创建单个用户 class 并在内部定义用户属性和 getter/setter 以及数据库交互,这样我就可以将 class 作为两者单独使用,即 user.getName()(作为 POJO)和 User.get(id)/user.save()(作为 DAO)。

这种方法可行吗?如果我开始使用这种方法,为什么会 运行 出现并发症?

它叫做活动记录模式。这是关于 JPA 主题的文章。 Active Record Pattern . and example https://github.com/ActiveJpa/activejpa

Is this method possible, and why are the complications I might run into, if I start with this approach?

是:

  1. Cohesion & Coupling

  2. 如果是真正的项目,支持它可能会成为问题

  3. 当你有 20 个实体时,很难决定将方法放入哪个实体,也很难找到你需要的方法,因为它可能在很多地方

  4. 当您不使用活动记录模式时,您可以与网络层共享实体,活动记录实体不能序列化。

  5. 代码越来越大