/ / Яка функціональна різниця між використанням EntityManager безпосередньо та JpaRepository - spring, jpa

Яка функціональна різниця між використанням EntityManager безпосередньо та JpaRepository - spring, jpa

Якийсь час я використовую наступне безпосередньо в сервісних класах:

@Repository
public interface PersonRepository extends JpaRepository<Person, Long> {
}

Як альтернативу, я міг би побудувати AbstractDao розширений PersonDao. Ці класи будуть використовувати 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 );
}

Чи існує будь-яка функціональна різниця між цими підходами - крім більшого коду на пізнішій? Що змусить мене вибрати один над одним?

Відповіді:

1 для відповіді № 1

Дані Spring Data у цьому випадку будуть охоплювати те, що ви маєте у другому прикладі. Інші схеми матимуть аналогічний підхід, приховуючи EntityManager і надаючи вам нестандартний API.

Немає різниці (з урахуванням лише результатів) між двома підходами і навіть вашою нотою крім більшого коду в пізнішій? це не так, оскільки я впевнений, що будь-яка структура матиме безліч рядків коду для підтримки операцій. :)