0

我的目标之一是创建一个引擎,该引擎将使用反射动态地从 JPA 对象中设置 pojo 对象中的值。匹配条件之一是字段名称应匹配。

我成功地为两个 pojo 对象实现了这个。但是当我尝试使用 JPA 对象作为对象参数之一时,它不起作用。根据我的研究,我发现方法Class.getDeclaredFields(),并没有给我字段的名称,而是 JPA 对象的成员变量的 getter/setter 方法名称。

任何人都可以给我一个领导或方向,比如我应该在哪里/做什么来完成这项任务?

4

2 回答 2

2

JPA 提供者通常会使用具体 JPA 类的动态代理类,因此您无法保证代理中的字段名称。关于代理的唯一保证是方法是相同的。使用调试器检查您尝试使用的 JPA 类实例的运行时类,您会发现问题。

您能做的最好的事情是使用反射来调用 JPA 返回的对象上的方法。


除此之外,我真的不明白为什么你需要 POJO 化实体类,因为实体主要是带注释的...... POJO。

于 2012-08-03T23:40:04.957 回答
0

匹配条件之一是字段名称应匹配。

我认为这是你问题的根源。根本无法保证 Java 对象的字段名称将匹配 getter 和 setter 的名称......或其他任何东西。如果你做出这个假设,你会遇到不起作用的情况。

最好的解决方案是干脆不使用这种方法。要求 Pojo 类符合 JavaBeans 规范并依赖 setter 来设置属性。这可能比对(私有)字段名称做出假设更有效。


事实上,使用动态代理实现的通用 JPA 对象的状态可以很好地保存在哈希映射中。您可以看到的那些字段可能只是用于其他用途的常量。

于 2012-08-03T23:53:04.370 回答