class SchemaIdentifierImpl<ENTITY> implements SchemaIdentifier<ENTITY> {

    private final String dbmsName;
    private final String schemaName;
    private final int hashCode;

    public SchemaIdentifierImpl(String dbmsName, String schemaName) {
        this.dbmsName = requireNonNull(dbmsName);
        this.schemaName = requireNonNull(schemaName);
        this.hashCode = privateHashCode();
    }

    @Override
    public String getDbmsId() {
        return dbmsName;
    }

    @Override
    public String getSchemaId() {
        return schemaName;
    }

    @Override
    public int hashCode() {
        return hashCode;
    }

    @Override
    public boolean equals(Object obj) {<FILL_FUNCTION_BODY>}

    private int privateHashCode() {
        int hash = 5;
        hash = 53 * hash + Objects.hashCode(dbmsName);
        hash = 53 * hash + Objects.hashCode(schemaName);
        return hash;
    }

    @Override
    public String toString() {
        return dbmsName + "." + schemaName;
    }
}

        if (this == obj) {
            return true;
        }
        if (obj instanceof SchemaIdentifier) {
            final SchemaIdentifier<?> that = (SchemaIdentifier<?>) obj;
            return 
                Objects.equals(dbmsName, that.getDbmsId()) &&
                Objects.equals(schemaName, that.getSchemaId());
        }
        return false;
    
<no_super_class>