자바 문서 발췌 문 구 글 데이터 스토어 (1)
데이터 스토어 는 웹 프로그램 을 위해 설계 되 었 으 며 읽 기와 조회 의 성능 에 중점 을 두 고 있다 는 것 을 알 아야 한다.
All queries are pre-indexed for fast results over very large data sets.
대량의 데이터 집중 에서 결 과 를 신속하게 조회 하기 위해 데이터 스토어 에서 하 는 모든 조 회 는 반드시 사전에 색인 을 만들어 야 한다.관계 형 데이터베이스 시스템 에서 색인 을 만 드 는 방식 과 달리 Google App Engine for Java 응용 프로그램 에서 사용 하 는 색인 은 XML 파일 에 저 장 됩 니 다.손 으로 작성 할 수도 있 고 Google Plugin for Eclipse 에서 자동 으로 생 성 할 수도 있 습 니 다.
With the App Engine datastore, every attempt to create, update or delete an entity happens in a transaction .
App Engine datastore 의 경우 하나의 실 체 를 만 들 거나 업데이트 하거나 삭제 하 는 행 위 는 하나의 업무 에서 이 루어 집 니 다.
All entities fetched, created, updated or deleted in a transaction must be in the same entity group.
한 업무 에서 여러 개의 실 체 를 증가, 삭제, 수정, 조사 작업 을 할 때 이런 실 체 는 반드시 같은 '실체 그룹' 에 속 해 야 한다.여기 서 '실체 그룹' 의 개념 에 대해 이해 하기 어렵 습 니 다. 다음은 코드 세그먼트 로 설명 하 겠 습 니 다.
public class Employee {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
private String firstName;
@Persistent
private String lastName;
@Persistent
private Date hireDate;
...
}
public class ContactInfo {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private String streetAddress;
@Persistent
private String city;
@Persistent
private String stateOrProvince;
@Persistent
private String zipCode;
...
}
Employee em = new Employee("Jiankang", "Jin", new Date());
ContactInfo info = new ContactInfo("ZhiChun Road", "Beijing",
"Beijing", "010");
PersistenceManager pm = PMF.get().getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
pm.makePersistent(em);
pm.makePersistent(info);
tx.commit();
} catch (Exception e) {
System.out.println(e);
} finally {
if (tx.isActive()) {
tx.rollback();
}
pm.close();
}
Servlet 을 실행 합 니 다. 콘 솔 에서 보 았 습 니 다:
javax.jdo.JDOFatalUserException: Illegal argument
NestedThrowables:
java.lang.IllegalArgumentException: can't operate on multiple entity groups in a single transaction.
수정 후:
public class Employee {
...
@Persistent
private ContactInfo contactInfo;
...
}
ContactInfo info = new ContactInfo("ZhiChun Road", "Beijing",
"Beijing", "010");
Employee em = new Employee("Jiankang", "Jin", new Date(), info);
PersistenceManager pm = PMF.get().getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
pm.makePersistent(em);
pm.makePersistent(info);
tx.commit();
} catch (Exception e) {
System.out.println(e);
} finally {
if (tx.isActive()) {
tx.rollback();
}
pm.close();
}
Servlet 을 다시 실행 합 니 다. 이상 이 없습니다.살펴보다http://127.0.0.1:8080/_ah / admin, Kind Employee 는 기록 이 있 습 니 다. Kind ContactInfo 는 기록 이 있 습 니 다.그리고 The key of the
ContactInfo
entity has the key of the Employee
entity as its entity group parent. 이 말 은 나 쁜 의 미 를 일 으 킬 수 있 습 니 다. 저 는 전자의 key 가 후자 의 key 를 포함 하고 있다 고 생각 했 지만 결 과 는:the key of Employee is 'agByDgsSCEVtcGxveWVlGAEM',
and the key of ContactInfo is 'agByHwsSCEVtcGxveWVlGAEMCxILQ29udGFjdEluZm8YAgw'.
Google Groups 에서 이 문 제 를 물 었 습 니 다. 이러한 현상 은 정상 적 입 니 다. 이들 의 key 는 단순 한 문자열 포함 관계 가 아 닙 니 다.하지만 분명 한 것 은:
KeyFactory.stringToKey(employeeKeyString).equals(KeyFactory.stringToKey(con
tactInfoKeyString).getParent())
참조:http://groups.google.com/group/google-appengine-java/browse_thread/thread/76ca595de10a5a5a/95509d1364acc9d4?lnk=gst&q=jinjiankang1980#95509d1364acc9d4
Entity groups are defined by a hierarchy of relationships between entities.
만약 여러 실체 간 에 관련 관계 가 있다 면, 그것들 은 하나의 실체 그룹 을 구성한다.제 가 이해 하기 로 는 이곳 의 'a hierarchy of relationships' 는 UML 의 조합 이나 집합 을 말 합 니 다.
(첨부 파일 소스 코드 주석 사용 방법: Google Eclipse 플러그 인 을 사용 하여 프로젝트 를 만 드 는 방법, 프로젝트 이름 GAE Test, 패키지 이름 com. gaetest)
(사용 하 는 GAE JDK: appengine - java - sdk - 1.2.2)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.