在我的数据库中,我有许多实体类,我通过Hibernate对它们运行标准的CRUD操作。创建泛型dao类以使用类进行所有主要操作不是问题。例如,在dao中我有类似这样的方法:
<T> List<T> loadAll(Class clazz)
现在我想通过Spring 3运营的Web服务将这些方法公开给Web服务客户端。
我看到的唯一方法是为所有实体实现web方法,即编写一个看起来像......的类
class BookResponse { List<BookEntity> books; }
...并在相应的Web方法“BookResponse getAllBooks()”中返回。这将破坏我的注意力,通过使用带有泛型的dao来简化代码。
还有其他方法吗? 如果不为所有实体实现Web方法,我该怎么做? 如果无法使用通用Web服务,可能还有其他方法可以通过简单的方式解决此任务吗?
更新: 目前我正在尝试实现一个看起来像
的响应类public class ServiceResponse<T>{
@XmlElementWrapper( name = "data" )
@XmlElements( @XmlElement(name = "a", type = EntityA.class), @XmlElement(name = "b", type = EntityB.class) )
private List<T> data = new ArrayList<T>( );
//getters,setters
}
所以我希望能够将带有注释的任何实体的列表插入到此响应中。这不会产生任何错误,但Web服务给我的响应是空的。
答案 0 :(得分:0)
我认为你需要一个新的POJO“GenericEntity”,它可以保存任何域实体类实例的信息。
它将包含一个类型字符串和一个任意/通用的命名属性列表
然后,它可以用于表示您的任何真实域实体
e.g。
type =书
attributes =(title =凤凰社,作者= J K罗琳)
e.g。
type = Car
attributes =(make = Renault,model = Clio)
这些示例显示了String属性,因此您必须对其进行排序,如果这样做足够好或者您需要强类型 - 这可能会更难。
然后,您可以通过Web服务公开您的“GenericEntity”,允许客户进行呼叫并指定他们希望搜索的域实体,甚至允许他们指定搜索条件。 添加和删除可以以类似的方式完成。
HTH,
大卫