2011-01-05 115 views
1

我现在仍在尝试绕过Hibernate一段时间,我认为我可以使用这个框架而不是硬核JDBC方法。Hibernate中注释类

看来,我现在看网的每一个教程都是利用注释风格的POJO配置。因此,我没有这个问题,它使编码更容易。

但我有这个想法。

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

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

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

对不起,如果我的问题可能有点模糊,但我只想澄清我的想法。请告诉我的问题是否仍然需要一些细节。

回答

1
  1. 它可以是相同的。可以说,这是拥有JPA和弃用Entity Beans的关键。

其他东西没有问题的语气,看起来不错,所以不能真正意识到,如果你有任何其他隐藏的问题。

+0

它可以是一样的吗?您好,先生,我只想问一下您对此的评论。这是否意味着比在某些情况下,我需要创建面向仅业务层的POJO类和仅在持续性休眠层上定向的POJO类。感谢您的回复。 – 2011-01-05 11:56:57

+0

@Mark:不管你说什么,我通常都使用相同的POJO/Entity/Bean作为我的TO。除非并且直到需要并且最好有一个单独的POJO用于​​演示。对于后者,假设我有一个web表单,它由多个表中的字段组成,那么有一个单独的'FormBean'或其他东西是一个好主意。 – 2011-01-06 02:51:02

+0

@Mark:这个想法是为什么需要复制的东西。在Web层时,JPA注释不成立。这将只是另一个POJO。因此,使用相同的POJO /实体作为TO,除非另有要求。我相信Qwerky提到的这个案例可以通过记录类和方法来处理。简单胜于复杂,复杂胜于复杂。万岁Python的禅宗。 – 2011-01-06 02:56:27

1

看起来像是在问你是否可以使用相同的类来表示应用程序的所有层,从数据库(模型)到业务逻辑(控制器)到表示(视图)的对象。

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

+0

是的,先生,这基本上是我的问题。只是一个问题,我怎样才能保护我的ID不被设置在视图层?我的POJO总是使用吸气和吸气的模式。感谢您的回复。 – 2011-01-05 11:55:08

+1

在数据层(您的实体)和其他地方(DTO)有独立的对象。仅在数据层使用实体,不要让它们逃跑。为此,您的DAO方法签名将使用DTO并在内部与实体进行转换。它有点麻烦,但在某些情况下,如果您需要进行防守编程,它可能是值得的。 – Qwerky 2011-01-05 12:10:30

+0

再次感谢您的答复先生。为了澄清,我可以编写一个名为Student的类,这将作为从视图层到业务层的DTO。然后在业务层,我应该实例化一个用Hibernate注解的POJO类。这个类将从来自DTO的数据填充?所以在我的情况下,DTO和我的持久化类将只有后者具有注释的字段完全相同。我的理解是否正确?谢谢。 – 2011-01-05 12:22:10