Attraper les violations de contrainte en JPA 2.0

Envisager la suite de l'entité de la classe, avec, par exemple, EclipseLink 2.0.2 - où la link attribut n'est pas la clé primaire, mais unique, néanmoins.

@Entity
public class Profile {  
  @Id 
  private Long id;

  @Column(unique = true)
  private String link;

  //Some more attributes and getter and setter methods
}

Lorsque j'insère des enregistrements avec un double de la valeur de la link attribut, EclipseLink ne pas jeter un EntityExistsException, mais jette un DatabaseException, avec le message expliquant que la contrainte unique a été violé.

Cela ne semble pas très utile, car il n'y aurait pas une simple base de données indépendante, de façon à intercepter cette exception. Quel serait le conseillé façon de traiter ce problème?

Quelques choses que je compte sont:

  • Vérifier le code d'erreur sur le DatabaseException - je crains que ce code d'erreur, cependant, est le natif de code d'erreur de la base de données;
  • Vérifier l'existence d'un Profile avec la valeur spécifique pour link à l'avance de toute évidence, cela entraînerait une énorme quantité de requêtes superflues.
J'ai soumis un bug de ce problème. Merci de voter pour lui afin que nous puissions obtenir ce problème résolu: bugs.eclipse.org/bugs/show_bug.cgi?id=375745

OriginalL'auteur wen | 2010-05-23