자바 문서 발췌 문 구 글 데이터 스토어 (1)

The datastore is designed with web applications in mind, with an emphasis on read and query performance.
데이터 스토어 는 웹 프로그램 을 위해 설계 되 었 으 며 읽 기와 조회 의 성능 에 중점 을 두 고 있다 는 것 을 알 아야 한다.
 
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)

좋은 웹페이지 즐겨찾기