diff --git a/core/modules/content_moderation/config/schema/content_moderation.schema.yml b/core/modules/content_moderation/config/schema/content_moderation.schema.yml
index 7f9e8fd..04d1edd 100644
--- a/core/modules/content_moderation/config/schema/content_moderation.schema.yml
+++ b/core/modules/content_moderation/config/schema/content_moderation.schema.yml
@@ -70,6 +70,22 @@ block_content.type.*.third_party.content_moderation:
       type: string
       label: 'Moderation state for new block content'
 
+entity_test.entity_test_bundle.*.third_party.content_moderation:
+  type: mapping
+  label: 'Enable moderation states for this entity test type'
+  mapping:
+    enabled:
+      type: boolean
+      label: 'Moderation states enabled'
+    allowed_moderation_states:
+      type: sequence
+      sequence:
+        type: string
+        label: 'Moderation state'
+    default_moderation_state:
+      type: string
+      label: 'Moderation state for new entity test'
+
 views.filter.latest_revision:
   type: views_filter
   label: 'Latest revision'
diff --git a/core/modules/content_moderation/src/ViewsData.php b/core/modules/content_moderation/src/ViewsData.php
index 19bcfa5..358b923 100644
--- a/core/modules/content_moderation/src/ViewsData.php
+++ b/core/modules/content_moderation/src/ViewsData.php
@@ -193,7 +193,7 @@ public function getViewsData() {
           'base' => $content_moderation_state_entity_base_table,
           'base field' => 'content_entity_id',
           'relationship field' => $entity_type->getKey('id'),
-          'join_extra' => [
+          'extra' => [
             [
               'field' => 'content_entity_type_id',
               'value' => $entity_type_id,
@@ -215,7 +215,7 @@ public function getViewsData() {
           'base' => $content_moderation_state_entity_revision_base_table,
           'base field' => 'content_entity_revision_id',
           'relationship field' => $entity_type->getKey('revision'),
-          'join_extra' => [
+          'extra' => [
             [
               'field' => 'content_entity_type_id',
               'value' => $entity_type_id,
diff --git a/core/modules/content_moderation/tests/src/Kernel/ViewsDataIntegrationTest.php b/core/modules/content_moderation/tests/src/Kernel/ViewsDataIntegrationTest.php
index c869619..9fd0686 100644
--- a/core/modules/content_moderation/tests/src/Kernel/ViewsDataIntegrationTest.php
+++ b/core/modules/content_moderation/tests/src/Kernel/ViewsDataIntegrationTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\content_moderation\Kernel;
 
+use Drupal\entity_test\Entity\EntityTestBundle;
+use Drupal\entity_test\Entity\EntityTestWithBundle;
 use Drupal\node\Entity\Node;
 use Drupal\node\Entity\NodeType;
 use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
@@ -21,6 +23,8 @@ class ViewsDataIntegrationTest extends ViewsKernelTestBase {
     'content_moderation_test_views',
     'node',
     'content_moderation',
+    'entity_test',
+    'text',
   ];
 
   /**
@@ -29,8 +33,20 @@ class ViewsDataIntegrationTest extends ViewsKernelTestBase {
   protected function setUp($import_test_views = TRUE) {
     parent::setUp($import_test_views);
 
+    $entity_type = clone \Drupal::entityTypeManager()->getDefinition('entity_test_with_bundle');
+    $keys = $entity_type->getKeys();
+    $keys['revision'] = 'revision_id';
+    $entity_type->set('revision_table', 'entity_test_with_bundle_revision');
+    $entity_type->set('entity_keys', $keys);
+    \Drupal::state()->set('entity_test_with_bundle.entity_type', $entity_type);
+    \Drupal::entityDefinitionUpdateManager()->applyUpdates();
+
+    $this->container->get('views.views_data')->clear();
+    drupal_flush_all_caches();
+
     $this->installEntitySchema('node');
     $this->installEntitySchema('user');
+    $this->installEntitySchema('entity_test_with_bundle');
     $this->installEntitySchema('content_moderation_state');
     $this->installSchema('node', 'node_access');
     $this->installConfig('content_moderation_test_views');
@@ -41,6 +57,19 @@ protected function setUp($import_test_views = TRUE) {
     ]);
     $node_type->setThirdPartySetting('content_moderation', 'enabled', TRUE);
     $node_type->save();
+
+    // Create an unrelated test entity to ensure the views joins are working.
+    $test_type = EntityTestBundle::create([
+      'id' => 'test_bundle',
+    ]);
+    $test_type->setThirdPartySetting('content_moderation', 'enabled', TRUE);
+    $test_type->save();
+
+    $test_entity = EntityTestWithBundle::create([
+      'type' => 'test_bundle',
+    ]);
+    $test_entity->moderation_state->target_id = 'draft';
+    $test_entity->save();
   }
 
   /**
diff --git a/core/modules/system/tests/modules/entity_test/entity_test.module b/core/modules/system/tests/modules/entity_test/entity_test.module
index b0c8cbf..ee551ca 100644
--- a/core/modules/system/tests/modules/entity_test/entity_test.module
+++ b/core/modules/system/tests/modules/entity_test/entity_test.module
@@ -95,6 +95,9 @@ function entity_test_entity_type_alter(array &$entity_types) {
   // Allow entity_test_update tests to override the entity type definition.
   $entity_types['entity_test_update'] = $state->get('entity_test_update.entity_type', $entity_types['entity_test_update']);
 
+  // Allow entity_test_with_bundle tests to override the entity type definition.
+  $entity_types['entity_test_with_bundle'] = $state->get('entity_test_with_bundle.entity_type', $entity_types['entity_test_with_bundle']);
+
   // Enable the entity_test_new only when needed.
   if (!$state->get('entity_test_new')) {
     unset($entity_types['entity_test_new']);
@@ -102,6 +105,17 @@ function entity_test_entity_type_alter(array &$entity_types) {
 }
 
 /**
+ * Implements hook_module_implements_alter().
+ */
+function entity_test_module_implements_alter(&$implementations, $hook) {
+  // Move our hook_entity_type_alter() implementation to the beginning of the
+  // list in order to run before content_moderation_entity_type_alter().
+  if ($hook === 'entity_type_alter') {
+    $implementations = ['entity_test' => $implementations['entity_test']] + $implementations;
+  }
+}
+
+/**
  * Implements hook_entity_base_field_info().
  */
 function entity_test_entity_base_field_info(EntityTypeInterface $entity_type) {
@@ -201,7 +215,7 @@ function entity_test_entity_bundle_info() {
   $bundles = array();
   $entity_types = \Drupal::entityManager()->getDefinitions();
   foreach ($entity_types as $entity_type_id => $entity_type) {
-    if ($entity_type->getProvider() == 'entity_test' && $entity_type_id != 'entity_test_with_bundle') {
+    if ($entity_type->getProvider() == 'entity_test' && $entity_type_id != 'entity_test_with_bundle' && $entity_type_id != 'entity_test_rev_with_bundle') {
       $bundles[$entity_type_id] = \Drupal::state()->get($entity_type_id . '.bundles') ?: array($entity_type_id => array('label' => 'Entity Test Bundle'));
     }
   }
