public static boolean equals(FlatRecordTraversalObjectNode left, FlatRecordTraversalObjectNode right) {
        if (left == null && right == null) {
            return true;
        }
        if (left == null || right == null) {
            return false;
        }
        if (!left.getSchema().getName().equals(right.getSchema().getName())) {
            return false;
        }
        extractCommonObjectSchema(left, right);

        return compare(left, right);
    }
@Test
    public void shouldFindRecordsUnequalOnTheSameDataModelWithAnObjectFieldNotSetOnOne() {
        HollowSchemaIdentifierMapper schemaMapper = new FakeHollowIdentifierMapper();

        HollowObjectMapper objectMapper = new HollowObjectMapper(new HollowWriteStateEngine());
        objectMapper.initializeTypeState(RecordWithSubObject1.class);
        objectMapper.initializeTypeState(RecordSubObject.class);
        FlatRecordWriter flatRecordWriter = new FlatRecordWriter(objectMapper.getStateEngine(), schemaMapper);

        RecordWithSubObject1 left = new RecordWithSubObject1();
        left.id = "ID";
        left.intField = 1;
        left.subObject = new RecordSubObject();
        left.subObject.stringField = "A";
        left.subObject.intField = 1;

        flatRecordWriter.reset();
        objectMapper.writeFlat(left, flatRecordWriter);
        FlatRecord leftRec = flatRecordWriter.generateFlatRecord();

        RecordWithSubObject1 right = new RecordWithSubObject1();
        right.id = "ID";
        right.intField = 1;
        flatRecordWriter.reset();
        objectMapper.writeFlat(right, flatRecordWriter);
        FlatRecord rightRec = flatRecordWriter.generateFlatRecord();

        // Even with fuzzy matching these records not equal bc "right" does not have `subObject`
        // it's defined in both schemas
        assertThat(FlatRecordTraversalObjectNodeEquality.equals(new FlatRecordTraversalObjectNode(leftRec), new FlatRecordTraversalObjectNode(rightRec))).isFalse();
        assertThat(FlatRecordTraversalObjectNodeEquality.equals(new FlatRecordTraversalObjectNode(rightRec), new FlatRecordTraversalObjectNode(leftRec))).isFalse();
    }