2009-05-07 5 views
69

Je suis curieux et j'ai besoin de trouver cette réponse rapidement. Google ne va pas aider beaucoup.Que signifie REFRESH et MERGE en termes de bases de données?

L'API Java Persistence a ces propriétés qui indiquent le cadre des opérations en cascade sur les entités associées:

CascadeType.PERSIST 
CascadeType.DELETE 
CascadeType.MERGE 
CascadeType.REFRESH 

Je sais ce que les deux premières moyenne: quand je persévère objet A qui a B, persistez B et et lorsque je supprime A, supprime également B. Mais je ne peux pas comprendre ce que les deux autres accomplissent. Aidez-moi?

Répondre

60

REFRESH signifie «tirer tous les changements d'état de la base de données dans ma représentation». Cascader c'est simple; cela signifie que toutes les entités associées sont actualisées. MERGE signifie quelque chose de complexe qui se rapproche de «save» mais qui ressemble plus à «repousser cette entité détachée en état géré et enregistrer ses changements d'état»; la mise en cascade signifie que toutes les entités associées sont repoussées de la même manière, et le descripteur d'entité gérée que vous obtenez de .merge() a toutes les entités gérées qui lui sont associées.

Link to one instance of the relevant docs

+0

Merci d'avoir expliqué ceci. J'ai été très confus au sujet de cette question aussi ... – kosoant

+0

Quelle est la valeur par défaut (si nous n'avons pas défini CascadeType), et quel est le plus sensible/commun à définir? –

+0

@Rosdi Kasim: Le '' CascadeType'' par défaut est un tableau vide. – user1438038

55

JPA Annotation Meaning for Many to Many relationships:

  • ALL - toutes les opérations en cascade possibles effectuées sur l'entité source sont montés en cascade à la cible de l'association.
  • MERGE - si l'entité source est fusionnée, la fusion est en cascade vers la cible de l'association. PERSONNALISER - si l'entité source est persistante, la persistance est en cascade vers la cible de l'association.
  • REFRESH - si l'entité source est actualisée, la régénération est en cascade vers la cible de l'association.
  • SUPPRESSION - Si l'entité source est supprimée, la cible de l'association est également supprimée.

je me les voir de cette façon (plus lisible):

  • PERSIST est de créer de nouveaux enregistrements de l'objet dans la base de données.
  • DELETE est, bien, supprimer.
  • MERGE, pour les objets existants, à fusionne les données existantes dans la table avec les données de mon objet. (synchronisation à la base de données)
  • REFRESH consiste à actualiser les données dans l'objet. Il y a peut-être eu un changement dans la base de données qui doit être synchronisé. (synchro à partir de la base de données)
+0

Javadoc pour les annotations ne rien clair pour moi. Merci d'avoir répondu! –