2012-08-12 5 views
0

나는 Riak 엔티티의 기본 클래스 및 BaseEntity를 확장 일부 파생 클래스가 있습니다. BaseEntity에는 @RiakKey로 주석이 지정된 Identifier라는 필드가 있습니다.

하지만 분명히 충분하지 않습니다. com.basho.riak에서

com.basho.riak.client.convert.NoKeySpecifedException : 내가 그렇지 않으면 나는이 예외가 각 파생 클래스에서 @RuiakKey의 말뭉치 주석과 함께 식별자 필드가 있어야합니다 보인다 com.att.cso.omss에서 .client.bucket.DefaultBucket.fetch (DefaultBucket.java:535) com.att.cso.omss.datastore.riak.controllers.RiakBaseController.isEntityExist (RiakBaseController.java:130)에서 .datastore.riak.controllers.RiakBaseController.createEntity (RiakBaseController.java:94) at com.att.cso.omss.datastore.riak.controllers.RiakBaseController.createServiceProvider (RiakBaseController.java:234) at com.att.cso .omss.datastore.riak.App.serviceProviderTests (Ap com.att.cso.omss.datastore.riak.App.main (App.java:38에서 p.java:62) )

그래서, 내 현재의 구현 (이 같은 식별자 필드의 중복을 찾습니다) :

공용 클래스 BaseEntity {

@RiakKey @JsonProperty ("ID") 보호 문자열 식별자;

public String getIdentifier() { 
    return identifier; 
} 

public void setIdentifier(String identifier) { 
    this.identifier = identifier; 
} 

. . .

공용 클래스 서비스는 BaseEntity {

@RiakKey 
@JsonProperty("Id") 
protected String identifier; 

public String getIdentifier() { 
    return identifier; 
} 

public void setIdentifier(String identifier) { 
    this.identifier = identifier; 
} 

이 중복을 피하기위한 방법이 확장?

답변

1

업데이트 :이 질문을 읽은 사람이 기여한 덕분에 이제이 기능은 1.0.7 클라이언트 릴리스부터 지원됩니다. 참조 : https://github.com/basho/riak-java-client/pull/180

원래 답변 :

짧은 답변 : 아니, 현재 주위에 방법이 아니다.

이유는 이러한 주석을 찾습니다 방법, 우리는 필드의 범위 지정 될 수 있도록 게다가, com.basho.riak.client.convert.reflect.AnnotationScanner 클래스입니다.

그것은 명시 적으로 클래스에서 선언 된 필드를 얻을 수 Class.getDeclaredFields() 사용, 사람을 상속되지 않습니다. 그 이유는 private 및 protected 멤버를 얻는 반면 Class.getFields()은 부모 클래스에서 public으로 선언 된 경우에만 상속 된 멤버를 가져옵니다. 이 약

한 가지 간단한 방법은 재귀 적으로 상속 트리를 각 상위 클래스를 검색하는 것입니다.도메인 객체에 대한 주석이 달린 필드를 캐시하는 방법 때문에이 작업은 단 한번의 공격 일 뿐이므로 아마 할 일이별로 없을 것입니다.

클라이언트에 추가하고 싶다면 github에서 문제를 열어주세요. (물론 & 코드를 직접 제출하십시오. 커뮤니티 제출에 항상 감사드립니다!) .

+0

감사합니다. 이 질문을 좀 볼 수 있니? http://stackoverflow.com/questions/11921245/riak-simple-searchmapreduce-throws-ioexception –