Я выполнил следующий jdo-запрос, он предназначен для получения списка сущностей с пустым «идентификатором потока». Однако, когда я проверяю возвращенный список, он содержит сущность с непустым идентификатором потока.
PersistenceManager pm = pmf.getPersistenceManagerProxy();
String flowId = "";
Map<String, Object> params = new HashMap<>();
params.put("flowId", flowId);
List<MyEntity> entities = pm.newQuery(MyEntity.class, " this.flowId == :flowId ").setNamedParameters(params).executeList();
Это не всегда происходит, но когда это происходит, я обнаружил, что всегда есть обновление для этого объекта из другого процесса, чтобы очистить «идентификатор потока» в то же время. Тем не менее, результат, который я получил из вышеупомянутого запроса, имеет эту сущность, но показывает непустой идентификатор потока. Я также проверил состояние объекта JDO неожиданно возвращенного объекта, он постоянно чист. Запрос выполняется в активной транзакции.
Вот SQL, скомпилированный JDOQLQuery.
SELECT 'com.example.MyEntity' AS "NUCLEUS_TYPE","A0"."CREATE_TIME","A0"."DATA_MAX_TIMESTAMP","A0"."DATA_MIN_TIMESTAMP","A0"."ID","A0"."OBSERVATION_ID","A0"."PARTITION_VALUE","A0"."PARTITION_CYCLE","A0"."PARTITION_TIMESTAMP","A0"."FLOW_ID","A0"."PROCESSING_STAGE","A0"."PROCESSING_STATUS","A0"."RECORD_COUNT","A0"."UPDATE_TIME" FROM "MY_ENTITIES" "A0" WHERE "A0"."FLOW_ID" = ?
Хотя я не думаю, что это уместно, уровень изоляции зафиксирован для чтения, сущность является отсоединяемой, и указанный выше запрос выполняется внутри транзакции. Пожалуйста, помогите, спасибо!
Обновление
После того, как я изменил уровень изоляции на повторимое чтение, это больше никогда не произойдет. Так что, скорее всего, это связано с уровнем изоляции. Я не уверен, есть ли ошибка или нет. Моя версия ядра данных - 4.1.6. Любые мысли помогут.