2012-08-03 6 views
0

내 목표 중 하나는 반사를 사용하여 JPA 오브젝트에서 pojo 오브젝트의 값을 동적으로 설정하는 엔진을 작성하는 것입니다. 일치하는 기준 중 하나는 필드 이름이 일치해야한다는 것입니다.reflection을 사용하여 JPA 오브젝트에서 개인 변수 특성을 검색하는 방법

두 개의 pojo 객체에 대해이를 성공적으로 구현할 수있었습니다. 그러나 JPA 객체를 객체 매개 변수 중 하나로 사용하려고 시도했지만 작동하지 않았습니다. 내 연구를 기반으로 그 방법은 Class.getDeclaredFields(), 나에게 필드의 이름을주지 않지만 JPA 객체에 대한 멤버 변수의 getter/setter 메소드 이름을 알았다.

누구든지이 작업을 수행하기 위해 어디에서/무엇을해야합니까?

답변

2

JPA 공급자는 구체 JPA 클래스의 dynamic proxy classes을 자주 사용하므로 프록시에서 필드 이름을 보증 할 수 없습니다. 프록시에 대한 유일한 보장은 방법이 동일하다는 것입니다. 디버거를 사용하여 사용하려는 JPA 클래스 인스턴스의 런타임 클래스를 검사하면 문제가 표시됩니다.

당신이 할 수있는 최선의 방법은 리플렉션을 사용하여 JPA에서 반환 된 객체의 메소드를 호출하는 것입니다. 어쨌든 엔티티 클래스를 POJO는-쓸어에 기업이 주로 주석 ... POJO이기 때문에 당신이 필요할 것 왜 따로


모든 것을, 난 정말 볼 수 없습니다.

+0

감사합니다. pojo -DTO 클래스를 만들어야하는 이유는 도메인 모델 객체에 대한 클라이언트 종속성을 분리하기 위해서입니다. – kcoder

+0

좋아요! 내 대답이 문제를 해결했다면, 받아 들일 수 있겠습니까? (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) 감사. –

0

일치하는 기준 중 하나는 필드 이름이 일치해야한다는 것입니다.

이 문제가 귀하의 문제라고 생각합니다. Java 객체의 필드 이름이 getter 및 setters ... 또는 다른 이름과 일치한다는 보장은 없습니다. 이 가정을하면 작동하지 않는 경우가 발생합니다.

최상의 솔루션은이 방법을 사용하지 않는 것입니다. Pojo 클래스가 JavaBeans 스펙을 따르고 속성을 설정하는 설정자에게 의존해야합니다. 이것은 (개인) 필드 이름에 대한 가정보다 더 자주 작동합니다.


실제로 동적 프록시를 사용하여 구현 된 일반 JPA 객체의 상태는 해시 맵에 잘 보관 될 수 있습니다. 볼 수있는 필드는 단순히 다른 것으로 사용되는 상수 일 수 있습니다.

+0

모두에게 도움을 주신 덕분에 나중에 얻을 수있는 것과 비슷한 것을 발견했습니다 http://dozer.sourceforge.net/documentation/about.html – kcoder

관련 문제