直接使用EntityManager和JpaRepository之间的功能区别是什么

时间:2016-04-06 01:17:47

标签: spring jpa

有一段时间我一直在服务类中直接使用以下内容:

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

作为替代方案,我可以构建一个由PersonDao扩展的AbstractDao。这些类将使用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 个答案:

答案 0 :(得分:1)

本案例中的Spring数据将涵盖第二个示例中的内容。其他框架将有类似的方法隐藏EntityManager并为您提供开箱即用的API。

两种方法之间没有区别(仅考虑结果)甚至你的注释除了后面的更多代码?是不正确的,因为我确定任何框架都有吨它背后的代码行来支持操作。 :)