gpt4 book ai didi

java - 用反射更新 JPA 实体不起作用?

转载 作者:搜寻专家 更新时间:2023-11-01 01:58:56 25 4
gpt4 key购买 nike

我有一个看起来像这样的实体:(我正在为网页编码,所以对于任何错误我深表歉意)

@Entity
public class Entity {
@Id
private Long id;
private String field;

// Insert getters and setters here...
}

我尝试使用反射来操纵它:

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());

这个程序打印“set using reflection”。但是,在数据库中使用反射设置的值不会更新:

SELECT * FROM ENTITY WHERE ID = 1
ID FIELD
1 set directly

这很奇怪。我可以发誓这曾经有用——但现在不行了。真的不能使用反射操作实体吗?

如果重要的话,我正在使用 EclipseLink 1.1.1。

最佳答案

通过反射改变实体类的值会充满问题。这是因为您正在处理一个持久类,因此持久性 API 需要了解字段的更改。

如果您通过反射进行更改,持久性 API 很可能不知道这些更改。

更好的解决方案是通过反射调用 setter 。

关于java - 用反射更新 JPA 实体不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1092148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com