diff --git a/src/main/java/caosdb/server/jobs/Job.java b/src/main/java/caosdb/server/jobs/Job.java index 6a90d081e4700eea3c743ca37a918ef4624d6bca..ff214b977dfd870a9aa56b3e8efa4f12967b2083 100644 --- a/src/main/java/caosdb/server/jobs/Job.java +++ b/src/main/java/caosdb/server/jobs/Job.java @@ -188,17 +188,19 @@ public abstract class Job extends AbstractObservable implements Observer { if (ret != null) { return ret; } - } else if (version.startsWith("HEAD~") && getEntityById(id) != null) { - // if version is HEAD~{OFFSET} with {OFFSET} > 0 and the targeted entity is - // part of this request (i.e. is to be updated), the actual offset has to be - // reduced by 1. HEAD always denotes the entity@HEAD *after* the successful - // transaction. - int offset = Integer.parseInt(version.substring(5)) - 1; - if (offset == 0) { - // special case HEAD~1 - resulting_version = "HEAD"; - } else { - resulting_version = new StringBuilder().append("HEAD~").append(offset).toString(); + } else if (version.startsWith("HEAD~")) { + EntityInterface entById = getEntityById(id); + if (entById != null && entById.getEntityStatus() != EntityStatus.VALID) { + // if version is HEAD~{OFFSET} with {OFFSET} > 0 and the targeted entity is is to be + // updated, the actual offset has to be reduced by 1. HEAD always denotes the entity@HEAD + // *after* the successful transaction, so that it is consistent with subsequent retrieves. + int offset = Integer.parseInt(version.substring(5)) - 1; + if (offset == 0) { + // special case HEAD~1 + resulting_version = "HEAD"; + } else { + resulting_version = new StringBuilder().append("HEAD~").append(offset).toString(); + } } }