1

Google AppEngine에서 datanucleus를 사용하여 부모 키로 데이터를 검색하고 싶습니다. 나는 JPA를 사용한다.하위 개체가 포함 된 경우 하위 개체의 속성 만 참조 할 수 있습니다.

@Entity 
public class StockValue implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Key key; 

    @ManyToOne 
    private Stock stock; 
} 

내가 쿼리 datanucleus이다 (이런 내 요청을하려고 노력 : 여기

@Entity 
public class Stock implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Key key; 

    @OneToMany(fetch=FetchType.LAZY, mappedBy="stock") 
    private List<StockValue> stockValues; 
} 

내 StockValue 콩 (어린이)입니다 : 여기

내 주식 콩 (부모)이다 검색어) :

DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService(); 
Query queryStock = new Query("Stock"); 
queryStock.addFilter("name", FilterOperator.EQUAL, "toto"); 

PreparedQuery prepare = datastoreService.prepare(queryStock); 
Entity asSingleEntity = prepare.asSingleEntity(); 

Query query = Query("StockValue", asSingleEntity.getKey()); 
prepare = datastoreService.prepare(query); 

List<Entity> asList = prepare.asList(FetchOptions.Builder.withLimit(10)); 

그리고 모두 정상적으로 작동합니다. 그러나 엔티티가 생기고 콩을 가지고 작업하는 것을 선호합니다. 그래서 내가 (쿼리 javax의 쿼리입니다)이 작업을 수행하려고 :

org.datanucleus.store.appengine.FatalNucleusUserException: SELECT FROM StockValue p WHERE p.key IS NOT null AND p.key.parentKey = :parentKey: Can only reference properties of a sub-object if the sub-object is embedded. 

나는이 이해가 안 : 여기

Query createQuery = entityManager.createQuery("SELECT p FROM Stock p WHERE p.name = \"toto\""); 
Object singleResult = createQuery.getSingleResult(); 
Stock stockEntity = (Stock)singleResult; 

createQuery = entityManager.createQuery("SELECT p FROM StockValue p WHERE p.key IS NOT null AND p.key.parentKey = :parentKey "); 
createQuery.setParameter(":parentKey", stockEntity.getKey()); 
Object singleResult2 = createQuery.getSingleResult(); 

그리고

내 문제,이 오류가 발생합니다. 콩을 먹으면 콩 사이의 관계가 좋을 것 같습니다 :

stockEntity.getStockValues(); 

재고 값이 올바로 입력됩니다. 내 요청이 실패하는 이유는 무엇입니까? 당신의 도움 간단히 말해서

답변

3

에 대한

감사합니다 : GAE에서 당신은 단지 하나 개의 클래스 내에서 하나의 엔티티 종류 내에서 쿼리, 또는 JPA/JDO 용어로 할 수 있습니다. StockValueStock은 두 개의 별도 클래스이고 따라서 두 개의 별도 엔티티 종류이므로 서로간에 질의 할 수 없습니다.

오류 제안 : @Embedded 주석을 사용하여 embedded one classes into another을 쿼리 할 수 ​​있습니다. 이 경우에는 데이터 저장소에 두 개의 클래스가 있지만 하나의 엔터티 종류 만 있습니다.

또한 key.parentKey은 엔티티 관계와 아무 관련이 없습니다. '상위'는 거래 범위를 정의하는 데 사용되는 Entity Groups을 정의하는 데 사용 된 GAE Datastore의 개념입니다.

+0

알겠습니다. 문제를 이해합니다. 우리 부모님 께 제 자녀들에게 콩과 엔티티가없는 것을 어떻게 알릴 수 있습니까? – Kiva

관련 문제