我需要将新的 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/