2010-01-18 5 views
2

En supposant que j'ai une personne d'objet avecMise en veille prolongée: Vérifiez si l'objet existe/changé

long id 
String firstName 
String lastName 
String address 

Je suis une personne génération objet quelque part dans ma demande. Maintenant, je voudrais vérifier si la personne existe dans la base de données (= prénom/nom-combinaison est dans la base de données). Si ce n'est pas le cas, insérez-le. Si oui, vérifiez si l'adresse est la même. Sinon => mettre à jour l'adresse.

Bien sûr, je peux faire quelques requêtes (d'abord, essayer de charger l'objet avec prénom/nom), puis (si existant), comparer l'adresse. Mais n'y a-t-il pas une approche plus simple et plus propre? Si vous avez plusieurs classes différentes et n'aimez pas avoir autant de requêtes.

Je voudrais utiliser des annotations comme pour dire: prénom/nom => ils sont la clé primaire. Vérifiez-les si l'objet existe. Adresse est le paramètre que vous devez comparer si elle est restée la même ou non.

Est-ce que Hibernate/JPA (ou un autre cadre) prend en charge quelque chose comme ça?

pseude-code:

if (database.containsObject(person)) { //containing according to compound keys 
    if (database.containsChangedObject(person)) { 
       database.updateObject(person); 
    } 
} else { 
    database.insertObject(person); 
} 

Répondre

1

Je voudrais utiliser les annotations comme pour dire: prenom/LastName => ils sont la clé primaire. Vérifiez-les si l'objet existe.

Vous pouvez déclarer une clé primaire composite en utilisant l'une des deux annotations: @IdClass ou @EmbeddedId. Pour plus de détails, jetez un oeil à Compound Primary Keys with Hibernate and JPA Annotations. Mais si vous voulez pouvoir insérer deux personnes avec le même prénom/nom et une adresse différente, vous devrez inclure l'adresse dans la clé. Notez qu'il est recommandé d'avoir une clé primaire de substitution numérique, c'est-à-dire une clé primaire qui sert uniquement d'identificateur et n'a aucune signification commerciale dans l'application.

+0

la personne n'est qu'un exemple. mais dans ce cas, je ne voudrais pas insérer deux personnes avec le même prénom/nom - je voudrais vérifier si une personne avec ce nom/prénom couple existe et si oui, ne pas insérer mais vérifier si l'adresse doit être mis à jour . – swalkner

+0

Oh, d'accord, je vois. Ensuite, vous avez juste besoin du prénom/nom dans la clé composée. –

+0

mais comment comparer ces "trois" étapes? 1. vérifier si l'objet existe (en comparant les clés composées, dans l'exemple: prénom/nom). 2a.) L'objet n'existe pas - insert - finisehd. 2b.) L'objet existe - l'objet a-t-il changé? (comparez l'objet à celui de la base de données) 3) si l'objet a changé - mettez-le à jour – swalkner

Questions connexes