Создание третьего объекта для saveOrUpdate кажется странным, когда у вас уже есть управляемая сущность прямо из базы данных для работы с ней. Просто скопируйте поля, которые пользователь может изменить прямо на управляемый объект, и зафиксируйте вашу транзакцию. На самом деле нет даже необходимости использовать saveOrUpdate явно, если вы не делаете что-то странное с границами транзакции в вашем методе getFromDB.
Transaction tx = session.beginTransaction();
PersonEntity entityFromTheClient = getPersonEntityFromClient();
//this is the data that i pull from the db for the merge
PersonEntity entityFromDb = getPersonEntityFromDb(entityFromTheClient.getID());
entityFromDb.setA(entityFromTheClient.getA());
entityFromDb.setB(entityFromTheClient.getB());
tx.commit();
Фактическая обработка транзакций, конечно, зависит от настроек вашей структуры.
Вот и все, готово. Если вы хотите скрыть настройки внутри какой-то утилиты, это нормально. Не вижу причин, чтобы сделать его более сложным, чем на основании предоставленной вами информации.