Wpis z mikrobloga

Dlaczego w tym kodzie:

@Transactional
public abstract class BusinessObject {

private T entity;

private Class clazz;

protected EntityManager entityManager;

public BusinessObject(@NotNull T entity, Class clazz,EntityManager entityManager) {
this.entity = entity;
this.clazz = clazz;
this.entityManager = entityManager;
}

public T attached() {
return entityManager.find(clazz,entity.getId());
}

public void delete(){
attached().deactivate();
}

public long getId(){
return attached().getId();
}
}

w momencie wywołania delete nie idzie nic do bazy? Nie powinno automatycznie zauważyć jakiejś zmiany i zobić update?

#java
  • 11
@fegwegw: Może być przez to że tym używam tego samego entityManagera wszędzie? Bo jest zautowirowany w miejscu gdzie tworze te obiekty i potem przekazany przez konstruktor tu (przez co w sumie lecą dwa razy find ale to potem będę nad tym myślał bo to na razie pomysł koncepcyjny)
Poziom wyżej używam takiej metody

public void removeById(long id){
leagueFinder.find(id).orElseThrow(()->new ResourceNotFoundException("No League with id: "+id)).delete();
}

a ten finder to

@ Service
public
Czy sensowne jest danie @ Transactional na cały serwice czy rozdrabniać się na konkretne metody?


@krasnoludkolo: to zależy. Jeśli nie potrzebujesz jakichś fine-grained konfiguracji propagacji transakcji, itp, to wystarczy na klasie.