in dnq-transient-store/src/main/kotlin/com/jetbrains/teamsys/dnq/database/TransientSessionImpl.kt [390:415]
override fun newLocalCopy(entity: TransientEntity): TransientEntity {
assertOpen("create local copy")
val tracker = transientChangesTracker
return when {
entity.isReadonly || entity.isWrapper -> entity
tracker.isRemoved(entity) -> {
logger.warn { "Entity [$entity] was removed by you." }
throw EntityRemovedException(entity)
}
tracker.isNew(entity) -> entity
else -> {
val entityId = entity.id
if (entityId in loadedIds) {
return entity
}
try {
// load persistent entity from database by id
newEntityImpl(persistentTransactionInternal.getEntity(entityId))
} catch (e: EntityRemovedInDatabaseException) {
logger.warn { "Entity [$entity] was removed in database, can't create local copy" }
throw e
}
}
}
}