class BaseDaoImpl implements Dao<T, ID> {

	@Override
	public boolean objectsEqual(T data1, T data2) throws SQLException {
		checkForInitialized();
		for (FieldType fieldType : tableInfo.getFieldTypes()) {
			Object fieldObj1 = fieldType.extractJavaFieldValue(data1);
			Object fieldObj2 = fieldType.extractJavaFieldValue(data2);
			// we can't just do fieldObj1.equals(fieldObj2) because of byte[].equals()
			if (!fieldType.getDataPersister().dataIsEqual(fieldObj1, fieldObj2)) {
				return false;
			}
		}
		return true;
	}

	protected  BaseDaoImpl(Class<T> dataClass);
	protected  BaseDaoImpl(ConnectionSource connectionSource, Class<T> dataClass);
	protected  BaseDaoImpl(ConnectionSource connectionSource, DatabaseTableConfig<T> tableConfig);
	private  BaseDaoImpl(ConnectionSource connectionSource, Class<T> dataClass, DatabaseTableConfig<T> tableConfig);

}