通过反射,我从x POJO类中找到了我需要显示的属性列表,还创建了一个标题列表,我将在该列表下显示属性(标题来自字段上的注释)。
POJO的形式是,对于我希望显示的每个属性,都有一个getter。
下面是详细信息:POJO使用@Entity注释,我正在执行一个查询(使用JPA)并获得一个结果集。现在,我希望通过调用正确的getter来显示结果集(特定POJO的集合)。
我可以给getters打电话。我的问题是没有这样做...我担心在大型结果集上使用反射可能不是特别有效,也许有一种方法可以使JPA实体对象以一致的方式迭代。
例如,如果有一种简单的方法可以将每条记录作为一个可索引的集合返回,那么我就可以按照它们在每条记录中出现的顺序排列我的头并进行迭代。这就不是POJO了,但是通过封装,它在API的一部分中看起来就像是POJO。
寻找建议!它会以这样或那样的方式工作,但我更希望它很漂亮。
发布于 2011-02-05 03:26:15
既然您正在使用JPA,那么您是否尝试过JPA2元模型(javax.persistence.metamodel)。这将从JPA元数据中为您提供有关JPA实体的信息:
entityManager.getMetamodel().entity(entityClass). getAttributes();发布于 2011-02-02 04:35:32
在使用反射时,您不必调用对象中的getter(如果getter只返回值,并且不包含任何特殊逻辑),即使字段是私有的(请参见setAccessible)。
至于性能,我们在当前的项目中正在做一些类似的事情,并且还没有遇到任何问题(在最坏的情况下,检查对象上的注释字段并通过反射从它们构建JSON数据的处理程序正在遍历多达数百个对象的深度嵌套对象树(集合中的集合),每个对象可以包含几个到几十个字段)。
发布于 2011-02-02 04:29:21
我想,这不是个好主意。因为您将逻辑级别和数据存储级别混合在一起。最好是覆盖toString方法或类似的smt。如果你仍然想实现你的想法,最简单的方法是迭代抛出字段并通过PropertyUtils访问它们的值
https://stackoverflow.com/questions/4867512
复制相似问题