2014-12-19 10 views
7

Po wywołaniu entityManager.persist (...) -Method i wywołaniu entityManager.merge (...) w danych źródłowych jpa . Zgodnie z dokumentacją: Jeśli jednostka nie została utrwalona jeszcze Spring Data JPA zapisze encję przez wywołanie do entityManager.persist (...) -Method, w przeciwnym razie entityManager.merge (...) -Method zostanie wywołany.Jak wiosenne dane JPA zdecyduje się wywołać metodę entityManager.persist (...) lub entityManager.merge (...)

W jaki sposób dane źródłowe określają, czy jednostka jest trwała czy nie?

Odpowiedz

12

oto impl z save metody (w SimpleJpaRepository):

/* 
    * (non-Javadoc) 
    * @see org.springframework.data.repository.CrudRepository#save(java.lang.Object) 
    */ 
    @Transactional 
    public <S extends T> S save(S entity) { 

     if (entityInformation.isNew(entity)) { 
      em.persist(entity); 
      return entity; 
     } else { 
      return em.merge(entity); 
     } 
    } 

Tak to wygląda w entityInformation.isNew(entity). Realizacja tej metody jest (w AbstractPersistable):

public boolean isNew() { 

     return null == getId(); 
    } 

Więc decyduje na podstawie pola id

+0

to głównie poprawne, ale jeśli używasz '' @version to musi być również uwzględnione. – Antoniossss

Powiązane problemy