通过反射,我找到了一个x POJO类的属性列表,我需要显示它们,并创建了一个标题列表,我将在其中显示属性(标题来自字段上的注释)。
POJO的形式是我希望展示的每个属性都有一个吸气剂。
以下是详细信息:POJO使用@Entity进行注释,我正在执行查询(使用JPA)并获取结果集。我现在想通过调用正确的getter来显示结果集(特定POJO的集合)。
我可以打电话给吸气鬼。我的问题是没有这样做......我担心在大型结果集上使用反射可能不是特别有效,也许有一种方法可以使JPA实体对象以一致的方式迭代。
例如,如果有一种简单的方法可以将每条记录作为可索引的集合返回,那么我可以按照它们在每条记录中出现的顺序排列我的标题并进行迭代。然后这不是POJO,但是通过封装它可以在API的一部分中看起来那样。
寻找建议!它会以某种方式工作,但我宁愿它很漂亮。
答案 0 :(得分:4)
由于您使用的是JPA,您是否尝试过JPA 2元模型(javax.persistence.metamodel)。这将从JPA元数据中为您提供有关JPA实体的信息:
entityManager.getMetamodel().entity(entityClass). getAttributes();
答案 1 :(得分:3)
使用反射时,您无需在对象中调用getter(如果getter仅返回值且不包含任何特殊逻辑),即使字段是私有的(请参阅setAccessible )。
至于性能,我们在当前项目中做了类似的事情并且还没有遇到任何问题(最坏的情况是,处理程序检查对象上的带注释字段并通过反射从它们构建JSON数据是遍历深层嵌套对象-trees(集合中的集合),最多包含数百个对象,每个对象可以包含少量到几十个字段。
答案 2 :(得分:1)
我认为,这不是个好主意。因为您将逻辑级别与数据存储级别混合在一起最好覆盖toString方法或像这样smt。如果你仍然想要实现你的想法,最简单的方法是迭代抛出字段并通过PropertyUtils访问它们的值