Seit einiger Zeit habe ich mit den folgenden direkt in Serviceklassen:Was der funktionale Unterschied zwischen der Verwendung eines EntityManager direkt und JpaRepository
@Repository
public interface PersonRepository extends JpaRepository<Person, Long> {
}
Als Alternative könnte ich eine AbstractDao durch eine PersonDao erweitert bauen. Diese Klassen verwenden würden die EntityManager
public abstract class AbstractDao<PK extends Serializable, T> {
private final Class<T> persistentClass;
@SuppressWarnings("unchecked")
public AbstractDao(){
this.persistentClass =(Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[1];
}
@PersistenceContext
EntityManager entityManager;
public T findByKey(PK key) {
return entityManager.find(persistentClass, key);
}
public List<T> findAll() {
return entityManager.createQuery("from " + persistentClass.getName()).getResultList();
}
public void save(T entity){
entityManager.persist(entity);
}
Gibt es einen funktionellen Unterschied zwischen diesen Ansätzen - anders als mehr Code in dem später? Was würde mich dazu bringen, einen über den anderen zu wählen?
Also das erste Code-Segment ist der am besten geeignete Ansatz bei der Verwendung von Spring? – skyman
Nicht wirklich _most appropriate_. Wir könnten eine Analogie von Ihnen haben, die Sie herumfahren möchten, können Sie ein Auto (Frühlingsdaten oder andere Rahmenwerke) kaufen, oder Sie können die Bits kaufen und Ihr Auto zusammenstellen. Jeder Fall ist ein Fall. Ich benutze den Frühling für alle meine Entwicklung, nur weil es direkt aus der Box funktioniert, aber auch, weil ich auch für bestimmte Fälle konfigurieren kann. Sie müssen möglicherweise etwas schnell hoch, dann Frameworks sind der Weg zu gehen, aber Sie benötigen möglicherweise auch etwas sehr Spezifisches, so dass Sie Ihre eigenen bauen müssen. – Desorder
Vielen Dank für Ihre Antwort - es ist sehr hilfreich. Ich habe langsam mein Wissen und meine Wertschätzung für den Frühling aufgebaut. – skyman