diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/TermStorageController.php b/core/modules/taxonomy/lib/Drupal/taxonomy/TermStorageController.php
index cb0821c..e3f6f56 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/TermStorageController.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/TermStorageController.php
@@ -76,6 +76,8 @@ public function baseFieldDefinitions() {
     $properties['vid'] = array(
       'label' => t('Vocabulary ID'),
       'description' => t('The ID of the vocabulary to which the term is assigned.'),
+      // @todo Convert this to an entity_reference_field once that works with
+      // config entities.
       'type' => 'string_field',
     );
     $properties['langcode'] = array(
@@ -87,6 +89,10 @@ public function baseFieldDefinitions() {
       'label' => t('Name'),
       'description' => t('The term name.'),
       'type' => 'string_field',
+      'required' => TRUE,
+      'property_constraints' => array(
+        'value' => array('Length' => array('max' => 255)),
+      ),
     );
     $properties['description'] = array(
       'label' => t('Description'),
@@ -97,6 +103,8 @@ public function baseFieldDefinitions() {
     $properties['format'] = array(
       'label' => t('Description format'),
       'description' => t('The filter format ID of the description.'),
+      // @todo Convert this to the filter_format type once
+      // https://drupal.org/node/1758622 is committed.
       'type' => 'string_field',
     );
     $properties['weight'] = array(
@@ -108,9 +116,12 @@ public function baseFieldDefinitions() {
     $properties['parent'] = array(
       'label' => t('Term Parents'),
       'description' => t('The parents of this term.'),
-      'type' => 'integer_field',
+      'type' => 'entity_reference_field',
       // Save new terms with no parents by default.
-      'settings' => array('default_value' => 0),
+      'settings' => array(
+        'default_value' => 0,
+        'target_type' => 'taxonomy_term',
+      ),
       'computed' => TRUE,
     );
     return $properties;
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermValidationTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermValidationTest.php
new file mode 100644
index 0000000..dc8ccd2
--- /dev/null
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermValidationTest.php
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\taxonomy\Tests\TermValidationTest.
+ */
+
+namespace Drupal\taxonomy\Tests;
+
+use Drupal\simpletest\DrupalUnitTestBase;
+
+/**
+ * Tests term validation constraints.
+ */
+class TermValidationTest extends DrupalUnitTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('taxonomy');
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Term Validation',
+      'description' => 'Tests the term validation constraints.',
+      'group' => 'Taxonomy',
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+  }
+
+  /**
+   * Tests the term validation constraints.
+   */
+  public function testValidation() {
+    $term = entity_create('taxonomy_term', array('name' => 'test', 'vid' => 'tags'));
+    $violations = $term->validate();
+    $this->assertEqual(count($violations), 0, 'No violations when validating a default term.');
+
+    $term->set('name', $this->randomString(256));
+    $violations = $term->validate();
+    $this->assertEqual(count($violations), 1, 'Violation found when name is too long.');
+    $this->assertEqual($violations[0]->getPropertyPath(), 'name.0.value');
+    $this->assertEqual($violations[0]->getMessage(), t('This value is too long. It should have %limit characters or less.', array('%limit' => 255)));
+
+    $term->set('name', NULL);
+    $violations = $term->validate();
+    $this->assertEqual(count($violations), 1, 'Violation found when name is NULL.');
+    $this->assertEqual($violations[0]->getPropertyPath(), 'name');
+    $this->assertEqual($violations[0]->getMessage(), t('This value should not be null.'));
+  }
+}
