La meilleure façon de prévenir les violations de contrainte unique avec JPA

J'ai un Keyword et un KeywordType comme des entités. Il y a beaucoup de mots-clés de quelques types.

Lorsque vous essayez de faire persister le deuxième mot-clé d'un type, l'unique contrainte est violée et que la transaction est annulée.

Recherche j'ai DONC trouvé plusieurs possibilies (certains d'entre eux dans des contextes différents, donc je ne suis pas sûr de leur validité ici) - ce post et ce post conseiller attraper l'Exception qui serait d'aucune utilité pour moi, que je finis par où j'ai commencé et toujours besoin de quelque sorte persistent à la clé.

La même chose s'applique à verrouillage proposé pour un autre situaltion ici
insertion Personnalisée états, comme proposé dans cette et cette postes ne fonctionnerait pas bon je suppose que, depuis que je suis à l'aide d'Oracle et pas MySQL et woulnd comme à lier la mise en veille prolongée.

Une solution à ce problème serait de tenter de récupérer le type de premier dans le code générant les mots clés, et le mit sur le mot-clé trouvé ou en créer un nouveau si ce n'.

Donc, quel serait le meilleur - plus robuste, portable (pour différentes bases de données et les fournisseurs de persistance) et sane approche ici?

Merci.

Les entités concernées:

public class Keyword {

    @Id
    @GeneratedValue
    private long id;

    @Column(name = "VALUE")
    private String value;

    @ManyToOne
    @JoinColumn(name = "TYPE_ID")
    private KeywordType type;
    ...
}

et

@Entity
@Table(uniqueConstraints = {@UniqueConstraint(columnNames = { "TYPE" }) })
public class KeywordType {

    @Id
    @GeneratedValue
    private long id;

    @Column(name = "TYPE")
    private String type;
    ...
}
Venant de la couche de la vue de votre application, savez-vous si "l'utilisateur" est la création d'un nouveau type de mot clé ou à l'aide d'un existant?
utiliser celles existantes qui proviennent de l'analyse d'un document. serait-il de modifier la solution?

OriginalL'auteur kostja | 2011-02-25