Différent entre cascade et inverse

Différent entre cascade et inverse

De nombreux développeurs Hibernate sont confus à propos de l'option cascade et du mot-clé inverse. À certains égards, ils se ressemblent vraiment au début, les deux sont liés à la relation.

Cascade vs inverse

Cependant, il n'y a pas de relation entre cascade et inverse, les deux sont des notions totalement différentes.

1. inverse

Ceci est utilisé pour décider quel côté est le propriétaire de la relation pour gérer la relation (insérer ou mettre à jour la colonne de clé étrangère).

Exemple

Dans cet exemple, le propriétaire de la relation appartient à stockDailyRecords (inverse = true).


    
    ...
    
        
            
        
        
    
    ...

Lorsque vous enregistrez ou mettez à jour l'objet stock

session.save(stock);
session.update(stock);

Hibernate insérera ou mettra à jour uniquement la table STOCK, aucune mise à jour sur la colonne de clé étrangère. More detail example here…

2. Cascade

En cascade, une fois une opération (sauvegarde, mise à jour et suppression) effectuée, il décide s'il doit appeler d'autres opérations (sauvegarde, mise à jour et suppression) sur une autre entité en relation.

Exemple

Dans cet exemple, la cascade = "save-update" est déclarée sur stockDailyRecords.


    
    ...
    
        
            
        
        
    
    ...

Lorsque vous enregistrez ou mettez à jour l'objet stock

session.save(stock);
session.update(stock);

Il insérera ou mettra à jour l'enregistrement dans la table STOCK et appellera une autre instruction d'insertion ou de mise à jour (cascade = "save-update") sur StockDailyRecord. More detail example here…

Conclusion

En bref, "l'inverse" est de décider quel côté mettra à jour la clé étrangère, tandis que "en cascade" est de décider ce que l'opération de suivi doit exécuter. Les deux sont assez similaires dans la relation, mais ce sont deux choses totalement différentes. Les développeurs Hibernate valent la peine de consacrer du temps à ses recherches, car mal comprendre le concept ou l'utiliser à mauvais escient entraînera de sérieux problèmes de performances ou d'intégrité des données dans votre application.