Détails de l'exception de contrainte JDBC

J'utilise JDBC pour conserver datatables à SQL Server et je souhaite insert une nouvelle ligne dans une table qui a une key primaire, plusieurs foreign keys et plusieurs contraintes d'unicité sur diverses colonnes. Je me request comment gérer les violations de contraintes afin de pouvoir identifier quels champs doivent être corrigés (afin de signaler quelque chose de significatif à l'user).

par exemple:

test de table: id (PRIMARY), fk_id (FOREIGN KEY), field1 (UNIQUE), field2 (UNIQUE)

L'insertion d'une valeur dupliquée dans field1 OR field2 donne:

ErrorCode: 2627 SQLState: 23000 Violation of UNIQUE KEY constraint '<UNIQUE CONSTRAINT NAME>'. Cannot insert duplicate key in object 'dbo.test'. The duplicate key value is (<VALUE>). 

Cependant, cela ne suffit pas pour déterminer quel champ a provoqué l'exception (donc je peux dire à l'user, correct field1 ou field2), à less d'parsingr le message d'erreur et d'utiliser le nom de contrainte (qui ne semble pas correct et solution fragile).

L'autre façon que je peux penser est de ne pas countr sur des exceptions et à la place interroger toutes les lignes existantes avec la même valeur (vérifier manuellement l'unicité avant l'insertion). Cependant, cela nécessite potentiellement de nombreuses requêtes dans une transaction sérialisable (réduction de la concurrency). Pire, la transaction peut se bloquer et revenir en arrière si le timing est malheureusement en conflit avec une autre transaction.

Existe-t-il un meilleur moyen de réaliser ce que j'essaie de faire sans avoir à parsingr les messages d'exception (spécifiques aux parameters régionaux)? Quelle est la «meilleure pratique»?