Failure to Read Updated AnyLogic DB Values

喜欢而已 提交于 2020-01-01 18:27:22

问题


I am currently using an AnyLogic database to store used parking capacity. I have written a function that reads the database and assigns an id to each container or trailer that is stored. Afterward, an UPDATE query is used to update the array.

The database read is performed using selectfrom() as specified by the database query tool. The UPDATE query is as follows:

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

This is based off of the example given in the AnyLogic help. storage is the database, id is the indexed column, trailer is the column with the relevant data.

When I run the simulation, the database updates as expected. However, in a select query within the same function or in a later call of the function, the value that the query reads is the value at the time of the beginning of the simulation. Is there a problem with my update query or can AnyLogic not read the update values while the simulation is ongoing?


回答1:


selectFrom and other select queries use cached tables by default. Cache is not affected by update function, it changes original tables. You may force the functions to use non-cached tables using False value of boolean argument.

In case of SQL string it is the first argument of the function:

// 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;");

In case of queryDSL Java code, it is the first argument of the final function:

// 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 );


来源:https://stackoverflow.com/questions/46536068/failure-to-read-updated-anylogic-db-values

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!