Bonjour à tous,

Une fonction Dao fait un insert dans une table, et je voudrais retourner l'id généré. Pour cela, j'ai les 2 solutions suivantes:
  • La solution du KeyHolder
  • La solution du Select LAST_INSERT_ID()


La deuxième solution me parait plus simple à mettre en place, mais j'ai un doute sur les accès concurrent. Spring partageant la même connection pour tous les DAO (j'utilise un DataSource), est-ce que je risque pas d'avoir la fonction SELECT LAST_INSERT_ID() qui me retourne un ID d'un autre INSERT effectué simultanément dans une autre requête. Et si oui, est que le fait de faire une transaction suffit à corriger le problème.

Comme par exemple ceci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
Object callbackObject = getTxTemplate().execute(new TransactionCallback() {
 
	@Override
	public Object doInTransaction(TransactionStatus transactionStatus) {
		getJdbcTemplate().update("INSERT INTO TABLE1(nom) VALUES (?)", monNom);
		return getJdbcTemplate().queryForInt("SELECT LAST_INSERT_ID()");
		}
	});
	return (Integer) callbackObject;
D'avance merci.