2013-04-13 2 views
1

저는 JDO 임베디드 엔터티를 사용하고 있습니다. this tutorial에 의해 부모와 자식 개체가 잘 설정되어 있습니다. 내 문제는 내가 자식 엔티티가 지속하도록 변경하지 못하는 것입니다. 여기 내 두 클래스는 다음과 같습니다JDO 임베디드 엔터티 필드 업데이트

부모 :

@PersistenceCapable(identityType = IdentityType.APPLICATION) 
public class TestEntity { 

    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Long id; 

    @Persistent 
    private String name; 

    @Persistent 
    @Embedded 
    private TestEntitySub sub; 

    public TestEntitySub getSub() { 
     return sub; 
    } 

    public void setSub(TestEntitySub sub) { 
     this.sub = sub; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 

아이 :

@PersistenceCapable 
@EmbeddedOnly 
public class TestEntitySub { 
    @Persistent 
    private String state; 

    public String getState() { 
     return state; 
    } 

    public void setState(String state) { 
     this.state = state; 
    } 
} 

코드 수정 :

PersistenceManager pm = PMF.get().getPersistenceManager(); 
TestEntity test = pm.getObjectById(TestEntity.class, 75L); //object has id=75 
test.getSub().setState("New State");  
pm.makePersistent(test); 
pm.close(); 

를 코드는 오류없이 실행되지만 데이터 저장소없이 보여줍니다 변경. 부모 개체의 자식 필드를 다시 설정하는 등 자식 개체를 유지하는 다양한 조합을 시도했지만 효과가 없습니다. 아이의 state 대신 부모의 name을 수정하면 잘 작동합니다. 그렇다면 어떻게 자녀의 필드를 수정합니까?

답변

1

나는 아직도 더 합법적 인 대답을 싶지만,이 고민 다른 사람을 위해, 나는 해결 방법을 찾았어요 :

PersistenceManager pm = PMF.get().getPersistenceManager(); 
TestEntity test = pm.getObjectById(TestEntity.class, 75L); //object has id=75 
TestEntitySub sub = test.getSub(); //Get the embedded entity 
sub = pm.detachCopy(sub);   //Make a detached copy 
sub.setState("New State");   //Update it 
test.setSub(sub);     //set it as the new embedded entity 
pm.makePersistent(test);   //and persist the parent 
pm.close(); 

단점은 PM이 포함 된 전체 복사본을 만들한다는 것이다 목적. 나는 거기에 더 좋은 방법이 있다고 가정하고, 만약 당신이 하나를 알고 있다면, 공유하십시오.