Aggiungo una possibile soluzione alla quale ho pensato solo ora... ditemi cosa ne pensate... 
Anche se il problema di fondo rimane comunque... dove lo creo? come posso collegare un oggetto GeneraId a tutti i nuovi oggetti? Dovrei crearlo nel main... però lo utilizzo nella classe prodotto... 
codice:
package esercizio2;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class GeneraId {
private List<Integer> idCreati = new ArrayList <Integer>();
private Random random = new Random();
private Integer id;
public GeneraId () {
}
public int generaId () {
do
id = random.nextInt();
while(idCreati.contains(id));
return id;
}
}