Persisting Entities
Persisting Entities
This section describes how to persist (save) entities with Spring Data JPA.
Saving Entities
Saving an entity can be performed with the CrudRepository.save(…) method. It
persists or merges the given entity by using the underlying JPA EntityManager . If the
entity has not yet been persisted, Spring Data JPA saves the entity with a call to the
entityManager.persist(…) method. Otherwise, it calls the
entityManager.merge(…) method.
Spring Data JPA offers the following strategies to detect whether an entity is new or not:
Option 1 is not an option for entities that use manually assigned identifiers and no version
attribute as with those the identifier will always be non- null . A common pattern in that
scenario is to use a common base class with a transient flag defaulting to indicate a new
instance and using JPA lifecycle callbacks to flip that flag on persistence operations:
JAVA
@MappedSuperclass
public abstract class AbstractEntity<ID> implements Persistable<ID> {
@Transient
private boolean isNew = true; 1
@Override
public boolean isNew() {
return isNew; 2
@PrePersist 3
@PostLoad
void markNotNew() {
this.isNew = false;
}
// More code…
}
1 Declare a flag to hold the new state. Transient so that it’s not persisted to the database.
3 Declare a method using JPA entity callbacks so that the flag is switched to indicate an
existing entity after a repository call to save(…) or an instance creation by the persistence
provider.