【问题标题】:Annotated Class in HibernateHibernate 中的注释类
【发布时间】:2011-06-03 22:20:47
【问题描述】:

一段时间以来,我仍在尝试解决 Hibernate 问题,我确实认为我可以利用这个框架而不是硬核 JDBC 方法。

现在我在网上看到的每个教程似乎都在使用注解风格的 POJO 配置。因此,我对此没有任何问题,它使编码变得更加容易。

但我有这个想法。

我正在注释的 POJO 是否与我需要从用户那里获取数据时使用的 POJO 相同?我的意思是,当用户填写 Web 表单并且我正在使用 Spring MVC 时。我通常会得到一个映射到用户输入表单的命令对象。这是我坚持的同一个命令对象,这些也只是 POJO。

在业务层/表示层,我认为需要一个模型层。例如,我有一个学生注册系统。在添加学生用例和添加学生表单中,我通常输入 StudentID、First_Name、Last_Name。

在我的 servlet 或控制器中,我通常将表单值映射到一个具体的类中。 Spring 在将表单值打包到具体类方面做得很好。

对不起,如果我的问题可能有点含糊,但我只是想澄清一下我的想法。如果我的问题还需要一些细节,请告知。

【问题讨论】:

    标签: java hibernate spring orm spring-mvc


    【解决方案1】:
    1. 可以相同。可以说,这就是拥有 JPA 并弃用 Entity Beans 的意义所在。

    其他东西没有问题的语气,我觉得很好,所以无法真正识别出你是否还有其他隐藏的问题。

    【讨论】:

    • 可以一样吗?您好,先生,我只是想问一下您的这个评论。这是否意味着在某些情况下,我需要创建仅面向业务层的 POJO 类和仅面向持久休眠层的 POJO 类。感谢您的回复。
    • @Mark:不管你说什么,我通常使用相同的 POJO/Entity/Bean 作为我的 TO。除非并且直到它需要并且更好地有一个单独的 POJO 进行演示。对于后者,假设我有一个 Web 表单,其中包含来自多个表的字段,那么拥有一个单独的 FormBean 或其他东西可能是个好主意。
    • @Mark:这个想法是为什么需要复制这个东西。 JPA 注释在 Web 层中不存在。这将只是另一个 POJO。因此,除非另有要求,否则请使用与 TO 相同的 POJO/实体。 Qwerky提到的案例,我相信可以通过很好地记录类和方法来处理。简单胜于复杂,复杂胜于复杂。 Python 之禅万岁。
    【解决方案2】:

    您似乎在问是否可以在应用程序的所有层中使用同一个类来表示对象,从数据库(模型)到业务逻辑(控制器)再到表示(视图)。

    答案是肯定的,但要小心。您可能想要保护对象的某些方面,例如您是否真的希望视图能够设置 ID?虽然您可能认为这不是问题,但当其他人在 6 个月内对使用帐户页面进行维护工作并决定允许用户更改其 ID 时,您可能会改变主意,只是因为 bean 有一个setID() 方法。

    【讨论】:

    • 是的,先生,这基本上是我的问题。只是一个问题,我怎样才能保护我的 ID 不被设置在视图层?我的 POJO 总是使用 getter 和 setter 的模式。感谢您的回复。
    • 在数据层(您的实体)和其他任何地方(DTO)都有单独的对象。仅在数据层中使用实体,不要让它们逃逸。为此,您的 DAO 方法签名将使用 DTO 并在内部与实体相互转换。这有点麻烦,但在某些情况下,如果您需要进行防御性编程,这样做是值得的。
    • 再次感谢先生的回复。为了澄清起见,我可以编写一个名为 Student 的类,这将用作从视图层到业务层的 DTO。然后在业务层中,我应该实例化一个用 Hibernate 注释的 POJO 类。此类将由来自 DTO 的数据填充?因此,就我而言,DTO 和我的持久类都将具有完全相同的字段,只是后者具有注释。我的理解正确吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-12-07
    • 2011-01-12
    • 2013-09-13
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2011-02-26
    • 2017-05-22
    相关资源
    最近更新 更多