【问题标题】:Active record pattern with Hibernate使用 Hibernate 的活动记录模式
【发布时间】:2013-06-21 12:40:00
【问题描述】:

我正在使用 Spring MVC + JSP + Hibernate 开发一个相当简单的 Web 应用程序。首先,我遵循了本教程: http://www.cavalr.com/blog/Spring_3_and_Annotation_Based_Hibernate_4_Example

这工作正常,但我担心代码的冗长。为了支持 User 实体,我们还有 UserDao、UserDaoImpl、UserService 和 UserServiceImpl。我知道对于大型企业应用程序,您可能确实想要这个。但对于我的简单网络应用程序来说,这是不必要的(和不需要的)复杂性。我可以更简单地在 Python 中实现所有这些。

那么,有什么方法可以让 Hibernate 使用 Active Record 设计模式?我想做的事情是让 User 从基类继承方法,如 get() 。所以你可以做 User.get(userName)

我对使用不同的 ORM 来休眠持开放态度;我刚刚开始,因为这似乎是常见的选择。而且它应该类似于我熟悉的 Python SQLAlchemy。

我也对更多开箱即用的解决方案持开放态度,也许是一个可以自动生成 DAO 类的 IDE 插件。

任何建议表示赞赏!

保罗

【问题讨论】:

    标签: java spring hibernate orm


    【解决方案1】:

    看看spring roo,它使用了主动记录模式。

    或者(在查看 roo 之后)您可以自己构建它。您只需要:

    • @Configurable 在您的实体中启用注入(这也需要真正的 AspectJ)

    您可以使用它来注入 EntityManager 或 hibernateSession

    【讨论】:

    • 我不知道这是如何回答问题的
    • 问题是:“那么,有没有办法让 Hibernate 使用 Active Record 设计模式?” Roo 是如何使用 spring 构建活动记录架构的示例。大多数人都会学习好的形式示例。
    • 你有向实体添加 configuravble 以启用其注入的示例吗?
    • @NimChimpsky:启动 roo shell,创建一个新项目,配置设置并让 roo 创建一个实体(谷歌任何 roo 教程并按照第一步)然后看看代码(包括 roo 生成的 aspectj 文件)- 我不想变得不礼貌,但我在手机上写了这个(Java 岛上的假期),所以我只能写这个说明。
    • 哇,袋鼠看起来棒极了!我现在正在玩它。我想我可能最终不会在这个项目中使用它,但很高兴知道这一点。谢谢
    【解决方案2】:
     UserDao, UserDaoImpl, UserService and UserServiceImpl
    

    这些接口使使用模拟对象的测试更容易,我想如果你不打算使用模拟对象,你可以摆脱它们。

    我有一个通用的 DomainRepository 用于简单的 get/sets - 你不需要服务类,除非涉及多个实体。

    要进一步减少您编写的代码,请查看spring data,尽管我想这里可能有点矫枉过正。

    【讨论】:

    • 谢谢,这太棒了,一种简单的方法来简化我现在拥有的东西,而无需进行重大更改。
    【解决方案3】:

    我想你可能正在寻找jOOQ。由于您指的是 Python 的 SQLAlchemy,因此 jOOQ 可能比 Hibernate 更适合匹配,因为它更加以 SQL 为中心。

    Java 中另一个流行的 ActiveRecord 实现是ActiveJDBC,它(据我所知)提供了您正在通过检测寻找的那种方法。他们网站上的一个例子:

    List<Person> people = Person.where("name = 'John'");
    Person aJohn =  people.get(0);
    String johnsLastName = aJohn.get("last_name");
    

    (当然,这个答案是有偏见的,因为我是jOOQ开发者)

    【讨论】:

    • 谢谢...我已决定坚持使用 Hibernate,但很高兴了解这些。 jOOQ 看起来是一个很酷的项目。顺便说一句,我在 SQLAlchemy MS-SQL 支持方面做了很多工作,所以我对你作为 ORM 开发人员的痛苦有所了解 :-)
    • @paj28:没有痛苦。其乐无穷!我特别喜欢 SQL Server,它是一个很棒的数据库!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多