Duplicando Registros importados

Boa tarde ,

Estou com um problema em uma determinada classe, ela faz a importação de um banco em progress para um banco em mySQL, mais toda vez que vou fazer essa importação, ela cria alguns registros indevidos, causando bastante problema aqui na empresa. Segue abaixo a classe que faz a importação:

package br.com.cmc.integracao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.cmc.modelo.Lotacao;

public class LotacaoCmcDao {

public Lotacao getLotacao(Connection connCmc, Lotacao lt) {

	String sql = null;
	Lotacao l = null;

	PreparedStatement ps = null;
	ResultSet rs = null;

	try {

		if (lt.getIdLotac() == 0) {

			sql = "SELECT idLotac, idEmp, idCtCusto, lotac, descLotac FROM lotacao WHERE lotac = ? AND idCtCusto = ? AND idEmp = ?";
			ps = connCmc.prepareStatement(sql);
			ps.setString(1, lt.getLotac());
			ps.setInt(2, lt.getIdCtCusto());
			ps.setInt(3, lt.getIdEmp());

		} else {

			sql = "SELECT idLotac, idEmp, idCtCusto, lotac, descLotac FROM lotacao WHERE idLotac = ?";
			ps = connCmc.prepareStatement(sql);
			ps.setInt(1, lt.getIdLotac());

		}

		rs = ps.executeQuery();

		while (rs.next()) {

			l = new Lotacao(rs.getInt("idLotac"));
			l.setIdEmp(rs.getInt("idEmp"));
			l.setIdCtCusto(rs.getInt("idCtCusto"));
			l.setLotac(rs.getString("lotac"));
			l.setDesclotac(rs.getString("descLotac"));

		}

	} catch (SQLException e) {
		e.printStackTrace();
	} finally {
		try {
			ps.close();
			rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	return l;
}

public void setLotac(Connection connCmc, Lotacao l) {

	Lotacao lt = getLotacao(connCmc, l);

	if (!l.equals(lt)) {
		insert(connCmc, l);
	} else {
		l.setIdLotac(lt.getIdLotac());
		update(connCmc, l);
	}

}

private void insert(Connection connCmc, Lotacao l) {

	String sql = "INSERT INTO lotacao (idEmp, idCtCusto, lotac, descLotac) VALUES (?, ?, ?, ?);";

	PreparedStatement ps = null;
	ResultSet rs = null;

	try {
		ps = connCmc.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
		ps.setInt(1, l.getIdEmp());
		ps.setInt(2, l.getIdCtCusto());
		ps.setString(3, l.getLotac());
		ps.setString(4, l.getDesclotac());

		ps.execute();

		rs = ps.getGeneratedKeys();

		if (rs.next()) {
			l.setIdLotac(rs.getInt(1));
		}

	} catch (SQLException e) {
		e.printStackTrace();
	}

}

private void update(Connection connCmc, Lotacao l) {

	String sql = "UPDATE lotacao SET idEmp = ?, idCtCusto = ?, lotac = ?, descLotac = ? WHERE idLotac = ?;";

	PreparedStatement ps = null;

	try {
		ps = connCmc.prepareStatement(sql);
		ps.setInt(1, l.getIdEmp());
		ps.setInt(2, l.getIdCtCusto());
		ps.setString(3, l.getLotac());
		ps.setString(4, l.getDesclotac());
		ps.setInt(5, l.getIdLotac());

		ps.executeUpdate();

	} catch (SQLException e) {
		e.printStackTrace();
	}

}

}

1 - Defina “registros indevidos”, por favor.

2 - Sua estrutura while, se possuir mais de 1 registro, atualizará o objeto de retorno só com o último registro. É isso mesmo que quer?

3 - Para seu código abaixo:

Você implementou o equals na sua classe Lotacao? Quando executa seu código, ele está sempre entrando na condição que executa o INSERT ou