We had got similar requirement, in which we need to copy entity at certain point of transaction and use it for Audit. Solution is pretty simple. We can use Json Object Mapper.
public class Employee {
public int id;
public String name;
}
Employee employee = entityManager.find(Employee.class, ID);
ObjectMapper mapper = new ObjectMapper();
Employee deepCopiedEmployee = mapper.readValue( mapper.writeValueAsString( employee ), Employee.class );
deepCopiedEmployee.setId(null);
Note: When using BeanUtils, Bean will be tracked in transaction. i.e. if any changes done is source bean during transaction will be reflected in target copied bean.