如何在运行时将java自定义或字符串对象添加到DAO模型对象?

时间:2014-06-17 05:23:08

标签: java spring

在这种情况下,我需要将新的String对象添加到自定义类型对象Array,ServiceOrderEntity。我知道这种打破ServiceOrderEntity完整性,但我必须从jsp访问这个字段。最好的方法是什么?

DAO课程:

...

SQLQuery localSQLQuery = localSession.createSQLQuery(query).addEntity(ServiceOrderEntity.class);
localList = localSQLQuery.list();
Iterator itr =  localList.iterator();
    while (itr.hasNext()){
        String field = "some value";
        itr.next().append( field  ); // something like that maybe....
     }
 return to Service class
    ...

服务类

...
List list = perform DAO request
model.addAttribute("serviceOrderList", localList);
....

更新

我拥有Hibernate生成的所有模型,我不想触摸它们。我需要添加自定义对象,在本例中为ServiceOrderEntity或查找解决方法。我想我可以复制它并添加新字段(使用Dozer)?新字段是其他复杂子查询的结果。

运行时的ServiceOrderEntity对象列表:


-list
--[0]model.ServiceOrderEntity@d826d3c7
---createdBy = {....}
---serviceRequestFK{java.Lang.Integer}     // << this one
--[1]
....
etc

我需要在name中使用 serviceRequestFK 获取ServiceOrderEntity。只要java不允许hot fix(将自定义字段添加到已创建的对象),我就需要找到一种方法将name字段传递给JSP。什么是正确的方法? 我真的不想包含来自jsp的DAO mathod请求...... 创建单独的名称列表?...

1 个答案:

答案 0 :(得分:1)

由于Java不允许混合(也就是猴子修补),你必须:

  • 将字段添加到基本实体。
  • 返回包含此字段的子类。

如果您想添加该字段以便Service类可以完成其工作,那么就足够了。但是,如果新字段是有效负载输入/输出的一部分,则考虑使用该特定服务,然后考虑:

  • 为每个服务调用创建特定于用例的有效负载。
  • 将这些结果映射到您的可重用对象模型。 (你可以使用像Dozer这样的东西)。

这一建议背后的理由是遵循契约优先发展的原则。

  • 您的模型将更具通用性,因此可重复使用。您可以向模型类添加可重用行为。您的服务将使用这些行为来协调流程。 (而不是拥有“贫血”的权利)。
  • 您的服务有效负载可以随着时间的推移保持相对稳定。因此,对您的模型进行更改不会影响您的所有服务订阅者。 (又名&#34;不要泄漏你的胆量&#34;)。