Q: Persisting language fields In my extbase model, I created getters and setters for the fields t3_origuid, sys_language_uid, and l10n_parent. 
When setting these fields and persisting, only the l10n_parent field is updated in the database. Is it possible to change the other fields, without manually querying the database of course.

A: To set sys_language_uid through extbase you need to use the internal API AbstractDomainObject::_setProperty() with $entity->_setProperty('_languageUid', $languageUid) where $languageUid would be the id of your langage record. You will find a more complete example on forge: https://forge.typo3.org/issues/61722.
You could also use this small service I've written to translate any domain object easily:
<?php
/*
 * This file is part of the TYPO3 CMS project.
 *
 * It is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License, either version 2
 * of the License, or any later version.
 *
 * For the full copyright and license information, please read the
 * LICENSE.txt file that was distributed with this source code.
 *
 * The TYPO3 project - inspiring people to share!
 */

use TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface;
use TYPO3\CMS\Extbase\Persistence\Generic\Mapper\ColumnMap;
use TYPO3\CMS\Core\SingletonInterface;
use TYPO3\CMS\Core\Utility\GeneralUtility;

/**
 * Provides services to translate domain objects
 */
class TranslationService implements SingletonInterface {

    /**
     * @var \TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper
     * @inject
     */
    protected $dataMapper;

    /**
     * Translates a domain object
     *
     * @param DomainObjectInterface $origin
     * @param DomainObjectInterface $translation
     * @param int $language
     * @throws \Exception
     * @return void
     */
    public function translate(DomainObjectInterface $origin, DomainObjectInterface $translation, $language) {
        if (get_class($origin) !== get_class($translation)) {
            throw new \Exception('Origin and translation must be the same type.', 1432499926);
        }

        $dataMap = $this->dataMapper->getDataMap(get_class($origin));

        if (!$dataMap->getTranslationOriginColumnName()) {
            throw new \Exception('The type is not translatable.', 1432500079);
        }

        if ($origin === $translation) {
            throw new \Exception('Origin can\'t be translation of its own.', 1432502696);
        }

        $propertyName = GeneralUtility::underscoredToLowerCamelCase($dataMap->getTranslationOriginColumnName());

        if ($translation->_setProperty($propertyName, $origin) === FALSE) {
            $columnMap = $dataMap->getColumnMap($propertyName);
            $columnMap->setTypeOfRelation(ColumnMap::RELATION_HAS_ONE);
            $columnMap->setType($dataMap->getClassName());
            $columnMap->setChildTableName($dataMap->getTableName());

            $translation->{$propertyName} = $origin;
        }

        $translation->_setProperty('_languageUid', $language);
    }
}


A: You have define your fields in the TCA.
'sys_language_uid' => array(
    'config' => array(
        'type' => 'passthrough'
    )
)

And the same for the other fields...

A: there are some tutorials in the web for mapping tables of typo3 with extbase. 
this tutorial is in german, but the code speaks for itself.
