@Override
 @SuppressWarnings("unchecked")
 public Map<String, Object> extractEntityTuple(Session session, EntityKey key) {
   MongoDBDatastoreProvider provider = MongoDBTestHelper.getProvider(session.getSessionFactory());
   DBObject finder = new BasicDBObject(MongoDBDialect.ID_FIELDNAME, key.getColumnValues()[0]);
   DBObject result = provider.getDatabase().getCollection(key.getTable()).findOne(finder);
   replaceIdentifierColumnName(result, key);
   return result.toMap();
 }
  @Test
  public void shouldSerializeAndDeserializeEntityKey() throws Exception {
    String[] columnNames = {"foo", "bar", "baz"};
    EntityKeyMetadata keyMetadata = new DefaultEntityKeyMetadata("Foobar", columnNames);
    Object[] values = {123, "Hello", 456L};

    // given
    EntityKey key = new EntityKey(keyMetadata, values);

    // when
    byte[] bytes = externalizerHelper.marshall(key);
    EntityKey unmarshalledKey = externalizerHelper.unmarshall(bytes);

    // then
    assertThat(unmarshalledKey.getTable()).isEqualTo(key.getTable());
    assertThat(unmarshalledKey.getColumnNames()).isEqualTo(key.getColumnNames());
    assertThat(unmarshalledKey.getColumnValues()).isEqualTo(key.getColumnValues());

    assertTrue(key.equals(unmarshalledKey));
    assertTrue(unmarshalledKey.equals(key));
    assertThat(unmarshalledKey.hashCode()).isEqualTo(key.hashCode());
  }