tpu*_*nen 4 java reflection jpa
我有一个看起来像这样的实体:(我正在编写网页,所以我为任何错误道歉)
@Entity
public class Entity {
@Id
private Long id;
private String field;
// Insert getters and setters here...
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用反射来操纵它:
Long id = 1;
Entity entity = myDao.getEntity(id);
entity.setField("set directly");
Field[] fields = entity.getClass().getDeclaredFields();
for (Field f : fields) {
if (f.getName().equals("field")) {
f.setAccessible(true);
f.set(entity, "set using reflection");
f.setAccessible(false);
}
}
System.out.println(entity.getField());
Run Code Online (Sandbox Code Playgroud)
该程序打印"使用反射设置".但是,在数据库中,使用反射设置的值不会更新:
SELECT * FROM ENTITY WHERE ID = 1
ID FIELD
1 set directly
Run Code Online (Sandbox Code Playgroud)
这很奇怪.我可以发誓这曾经发挥作用 - 但现在却不行.难道你真的不能用反射来操纵实体吗?
如果重要的话,我正在使用EclipseLink 1.1.1.
通过反思改变实体类的价值将充满问题.这是因为您正在处理一个持久的类,因此持久性API需要知道字段的更改.
如果您通过反射进行更改,则持久性API可能无法了解这些更改.
更好的解决方案是通过反射调用setter.
| 归档时间: |
|
| 查看次数: |
3008 次 |
| 最近记录: |