나는 이런 식으로 보이는 엔티티가있다 : (나는 실수를 사과한다. 그래서 나는 실수를 사과한다.)리플렉션으로 JPA 엔티티를 업데이트해도 작동하지 않습니까?
@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());
이것은 프로그램은 "반사를 사용하여 설정"을 인쇄합니다. 그러나 데이터베이스에서 리플렉션을 사용하여 설정된 값은 업데이트되지 않습니다.
SELECT * FROM ENTITY WHERE ID = 1
ID FIELD
1 set directly
이것은 이상합니다. 나는 이것이 일하는 데 사용되었다고 맹세 할 수있다. 그러나 지금은 그렇지 않다. 리플렉션을 사용하여 엔티티를 조작 할 수 없습니까?
문제가 있다면 EclipseLink 1.1.1을 사용하고 있습니다.
감사합니다. 이제 작동합니다. 리터를 통해 세터와 게터를 호출합니다. EclipseLink의 정적 제직 기능이 켜져있을 때 원래 코드가 파손 된 것으로 생각합니다. 작동하는 데 직접 사용 된 필드를 조작했기 때문입니다. 그러나 이제는 모두 잘되었습니다. – tputkonen