BatchUpdate algorithme propre
Bonjour,
J'utilise dans plusieurs batch la méthode batchUpdate pour effectuer des mises à jour en masse rapidement.
J'ai besoin d'un avis concernant mon algorithme car je suis souvent dans cette situation que j'aimerais rendre simple d'utilisation.
J'ai par exemple une liste de cartes où chaque carte contient une liste de bénéficiaires. Je voudrais insérer en masse ma liste de bénéficiaire.
Pour cela, j'utilise le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| int nbCartes = 0;
// Réserve autant d'ID pour la table P2TP que de carte à créer
for (CarteContext carte : items) {
nbCartes += carte.getListeCartes().size();
}
final int nbCartesFinal = nbCartes;
getJdbcTemplate().batchUpdate(INSERT_CARTE, new BatchPreparedStatementSetter() {
private int numCarte = 0;
private int numBenef = 0;
public void setValues(PreparedStatement ps, int i) throws SQLException {
int j = 0;
if (items.get(numCarte).getListeBeneficiaire().size() > 0
&& numBenef >= items.get(numCarte).getListeBeneficiaire().size()) {
numCarte++;
numBenef = 0;
}
while (items.get(numCarte).getListeBeneficiaire().size() == 0) {
numCarte++;
}
CarteContext carteContext = items.get(numCarte);
Beneficiaire benef = items.get(numCarte).getListeBeneficiaire().get(numBenef);
ps.setLong(++j, benef.getIdentifiantBeneficiaire());
ps.setString(++j, benef.getNom());
ps.setString(++j, benef.getPrenom());
numBenef++;
}
public int getBatchSize() {
return nbCartesFinal;
}
}); |
C'est le parcours de ma liste de bénéficiaire qui est à mon avis compliqué. J'ai du mal à gérer le parcours d'une liste dans une liste...
Je pourrais créer une liste intermédiaire où je mettrais tous les bénéficiaires à plat mais je n'aime pas cette méthode car j'ai besoin d'accéder à la carte d'un bénéficiaire lorsque je fais l'insertion. Je n'ai pas non plus envie de créer un attribut carte dans mon bénéficiaire pour le faire.
Si vous avez une idée pour rendre le code clair et simple et qui se transpose également dans le cas où je dois parcourir une liste de liste de liste de ...
Merci pour votre aide.