2017-10-03 3 views
1

현재 AnyLogic 데이터베이스를 사용하여 사용 된 주차 용량을 저장하고 있습니다. 데이터베이스를 읽고 저장되는 각 컨테이너 나 트레일러에 ID를 할당하는 함수를 작성했습니다. 그런 다음 UPDATE 쿼리를 사용하여 배열을 업데이트합니다.업데이트 된 AnyLogic DB 값을 읽지 못함

데이터베이스 읽기 도구는 데이터베이스 쿼리 도구에서 지정한대로 selectfrom()을 사용하여 수행합니다.

 update(storage) 
     .where(storage.id.eq(ret%1000/10)) 
     .set(storage.trailer, 1) 
     .execute(); 

이것은 AnyLogic 도움말에서 주어진 예 오프를 기반으로 다음과 같이 UPDATE 쿼리입니다. 스토리지는 데이터베이스, ID는 인덱싱 된 열, 예고편은 관련 데이터가있는 열입니다.

시뮬레이션을 실행하면 예상대로 데이터베이스가 업데이트됩니다. 그러나 동일한 함수 내에서 또는 나중에 함수를 호출 할 때 선택 쿼리에서 쿼리가 읽는 값은 시뮬레이션 시작 시점의 값입니다. 업데이트 쿼리에 문제가 있습니까? 아니면 AnyLogic이 시뮬레이션이 진행되는 동안 업데이트 값을 읽을 수 없습니까?

답변

0

selectFrom 및 기타 선택 쿼리는 기본적으로 캐시 된 테이블을 사용합니다. 캐시는 update 함수의 영향을받지 않으며 원래 테이블을 변경합니다. 부울 인수의 값이 False 인 비 캐시 테이블을 사용하도록 함수를 강제 설정할 수 있습니다.

이 함수의 첫 번째 인수 인 SQL 문자열의 경우

:

// read from cache 
selectFrom(branches) 
    .where(branches.al_id.eq(9)) 
    .firstResult(branches.branch); // or 
selectFrom(branches) 
    .where(branches.al_id.eq(9)) 
    .firstResult(true, branches.branch); 

// read from original 
selectFrom(branches) 
    .where(branches.al_id.eq(9)) 
    .firstResult(false, branches.branch); 
: queryDSL 자바 코드의 경우

// read from cache 
selectUniqueValue(double.class, "SELECT processing_time FROM processing_times WHERE part = agent.name;"); // or 
selectUniqueValue(true, double.class, "SELECT processing_time FROM processing_times WHERE part = agent.name;"); 

// read from original 
selectUniqueValue(false, double.class, "SELECT processing_time FROM processing_times WHERE part = agent.name;"); 

, 그것은 최종 함수의 첫 번째 인수입니다