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

标签 java spring

我需要将新的 String 对象添加到自定义类型对象的数组中,在本例中为 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 或找到解决方法。我想我可以复制它并向其附加新字段(使用推土机)?新字段是其他复杂子查询的结果。

运行时的ServiceOrderEntity对象列表:

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

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

最佳答案

由于 Java 不允许混合(又名猴子修补),您必须:

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

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

  • 为每个服务调用创建特定于用例的负载。
  • 将这些结果映射到可重用对象模型上。 (您可以使用类似 Dozer 的内容)。

此建议背后的基本原理是遵循契约优先的开发原则。

  • 您的模型将更加通用,因此可以重复使用。您可以将可重用的行为添加到模型类中。您的服务将使用这些行为来编排流程。 (与“贫血”实体相反)。
  • 随着时间的推移,您的服务负载可以保持相对稳定。因此,对模型的更改不会影响所有服务订阅者。 (又名“不要泄露你的胆量”)。

关于java - 如何在运行时将java自定义或字符串对象添加到DAO模型对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24256256/

相关文章:

java - 在运行 Java 应用程序之前检测 JRE

java - 滚动问题 - 当我按下时不滚动

java - 如何在JAVA中设置SWING窗口的尺寸

spring - Spring MVC 中的依赖注入(inject)问题 [版本 Spring 3.1.0.RELEASE]

java - 如何从udp数据包中读取1位

java - 了解 Java 中的内存分配和 GC

java - Spring Security 不接受正确的凭据

java - Spring Boot 事件监听器不接收事件

Spring Boot如何读取jar外的属性文件

java - 用户登录时 Shiro 过滤器验证用户错误