In jpa merge, are all coumns updated or only th开发者_Python百科e columns which have new values?
While updating if i set value of some attribute to null, will null value will be stored in that cloumn in db, or will it retain previous value?
When merging an entity X, the whole state of X will be "merged" (if X is a valid "candidate" of course). The JPA 1.0 specification puts it like this:
3.2.4.1 Merging Detached Entity State
The merge operation allows for the propagation of state from detached entities onto persistent entities managed by the EntityManager.
The semantics of the merge operation applied to an entity X are as follows:
- If X is a detached entity, the state of X is copied onto a pre-existing managed entity instance X' of the same identity or a new managed copy X' of X is created.
- If X is a new entity instance, a new managed entity instance X' is created and the state of X is copied into the new managed entity instance X'.
- If X is a removed entity instance, an
IllegalArgumentException
will be thrown by the merge operation (or the transaction commit will fail).- If X is a managed entity, it is ignored by the merge operation, however, the merge operation is cascaded to entities referenced by relationships from X if these relationships have been annotated with the cascade element value
cascade=MERGE
orcascade=ALL
annotation.- For all entities Y referenced by relationships from X having the cascade element value
cascade=MERGE
orcascade=ALL
, Y is merged recursively as Y'. For all such Y referenced by X, X' is set to reference Y'. (Note that if X is managed then X is the same object as X'.)- If X is an entity merged to X', with a reference to another entity Y, where
cascade=MERGE
orcascade=ALL
is not specified, then navigation of the same association from X' yields a reference to a managed object Y' with the same persistent identity as Y.The persistence provider must not merge fields marked LAZY that have not been fetched: it must ignore such fields when merging.
Any
Version
columns used by the entity must be checked by the persistence runtime implementation during the merge operation and/or at flush or commit time. In the absence ofVersion
columns there is no additional version checking done by the persistence provider runtime during the merge operation.
精彩评论