无法读取更新的AnyLogic DB值 [英] Failure to Read Updated AnyLogic DB Values

查看:119
本文介绍了无法读取更新的AnyLogic DB值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我当前正在使用AnyLogic数据库存储已用的停车容量.我编写了一个读取数据库并为存储的每个容器或拖车分配ID的函数.之后,将使用UPDATE查询来更新阵列.

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.

使用数据库查询工具指定的selectfrom()执行数据库读取. UPDATE查询如下:

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

这是基于AnyLogic帮助中给出的示例的.存储是数据库,id是索引列,拖尾是具有相关数据的列.

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.

运行模拟时,数据库将按预期更新.但是,在同一函数内的选择查询中或该函数的后续调用中,该查询读取的值是模拟开始时的值.我的更新查询是否存在问题,或者在模拟进行过程中AnyLogic不能读取更新值吗?

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?

推荐答案

selectFrom和其他选择查询默认情况下使用缓存的表.缓存不受update函数的影响,它会更改原始表.您可以使用boolean参数的False值来强制函数使用非缓存的表.

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.

对于SQL字符串,它是函数的第一个参数:

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

对于queryDSL Java代码,它是最终函数的第一个参数:

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

这篇关于无法读取更新的AnyLogic DB值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆