Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What do REFRESH and MERGE mean in terms of databases?

I'm curious and need to find this answer quick. Google won't help much.

The Java Persistence API has these properties that tell the framework to cascade operations on associated entities:

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

I know what the first two mean: when I persist object A which has B, persist B as well, and when I delete A, delete B as well.

But I can't make any sense of what the other two accomplish. Help?

like image 665
André Chalella Avatar asked May 07 '09 19:05

André Chalella


People also ask

What does cascade merge mean?

CascadeType. MERGE : cascade type merge means that related entities are merged when the owning entity is merged.

What is the difference between Merge and persist in hibernate?

Persist should be called only on new entities, while merge is meant to reattach detached entities. If you're using the assigned generator, using merge instead of persist can cause a redundant SQL statement.

What does EntityManager refresh do?

The EntityManager. refresh() operation is used to refresh an object's state from the database. This will revert any non-flushed changes made in the current transaction to the object, and refresh its state to what is currently defined on the database.

What does hibernate refresh do?

At a very high level, refresh() means pulling any state changes from the database that have been done outside the current Session and after the entity has been loaded. Cascading the refresh() means that all associated entities are also refreshed.


2 Answers

JPA Annotation Meaning for Many to Many relationships:

  • ALL - all possible cascading operations performed on the source entity are cascaded to the target of the association.
  • MERGE - if the source entity is merged, the merge is cascaded to the target of the association.
  • PERSIST - if the source entity is persisted, the persist is cascaded to the target of the association.
  • REFRESH - if the source entity is refreshed, the refresh is cascaded to the target of the association.
  • REMOVE - if the source entity is removed, the target of the association is also removed.

I myself see them this way (more readable):

  • MERGE - for existing objects, to merge the existing data in the table with the data in my object. (sync to database)
  • PERSIST - is create new records from object in the database.
  • REFRESH - is to refresh the data in the object. Perhaps there was a change on the database which needs to be synced. (sync from database)
  • REMOVE - is, well, delete.
like image 77
cgp Avatar answered Sep 24 '22 15:09

cgp


REFRESH means "pull any state changes from the database into my representation". Cascading this is simple; it means that all associated entities are refreshed.

MERGE means something complex that approximates "save" but is more like "push this detached entity back into managed status and save its state changes"; the cascading means that all associated entities get pushed back the same way, and the managed-entity handle you get back from .merge() has all managed entities associated with it.

Link to one instance of the relevant docs

like image 25
chaos Avatar answered Sep 20 '22 15:09

chaos