Hej, staram się zrobić u siebie w projekcie (spring boot) obiekty biznesowe, które dostarczałby metod biznesowych do anemicznych encji. Sam pomysł wygląda tak:
@Configurable
public abstract class BusinessObject<T extends Identifiable<K>,K extends Serializable> {
protected T entity;
private Class<T> clazz;
@PersistenceContext
protected EntityManager entityManager;
public BusinessObject(@NotNull T entity, Class<T> clazz) {
this.entity = entity;
this.clazz = clazz;
}
public T attached() {
return entityManager.find(clazz,entity.getId());
}
public K getId(){
return entity.getId();
}
}
Użycie EntityManager zamiast repository pozwala uprościć trochę tworzenie tych obiektów (nie trzeba podawać w konstruktorze samego repository tylko klasę co można zrobić z każdego miejsca w projekcie). Do tworzenia obiektów na bazie encji które już istnieją używam:
@Service
public class MatchFinder implements Finder<Match,Long>{
@PersistenceContext
private EntityManager entityManager;
@Override
public Optional<Match> find(Long id) {
MatchEntity matchEntity = entityManager.find(MatchEntity.class,id);
if(matchEntity!=null){
return Optional.of(new Match(matchEntity));
}
return Optional.empty();
}
}
I analogicznie do tworzenia jakiegoś creatora. Problemy jakie z tym mam to, że nie do końca wiem jak sprawić aby EntityManager nie był nullem. W jaki sposób sprawić żeby EntityManager był ustawiony. Czy jest jakiś sensowny sposób na to?