@PersistenceContext
private EntityManager em
注入的是实体管理器,执行持久化操作的,需要配置文件persistence.xml。
注入一堆保存实体类状态的数据结构,针对实体类的不同状态(四种,managedh或detached等)可以做出不同的反应(merge,persist等等),其实就是把数据从数据库里提出,然后在内存里处理的,再返回数据库的法则。
@Resource
是注入容器提供的资源对象,比如SessionContext MessageDrivenContext。或者你那个name指定的JNDI对象
可以理解为资源->数据源->也就是数据连接,基本上就是告诉程序数据库在哪里
如何获得EntityManager
关于这个问题,抽象类因为不能实例化,所以不能在spring的xml里配置bean,故不能作为属性注入其他bean。只能用抽象类的完全实现的子类注入。所以楼主不要纠结这个问题。 @PersistenceContext为什么又能实现EntityManager而引入jpa呢? 这是因为spring遇到注解@PersistenceContext后,从容器中得到一个EntityManager对象,但这个对象其实是它子类的对象,而且已经初始化了,不是EntityManager自身的。所有的对象spring都能管理,so,得到一个子类对象很好理解吧
关于如何获得EntityManager:
在容器内部使用,使用@PersistenceContext 来注入.
@PersistenceContext
private EntityManager em
TAG
=======================================================
注入:
让容器来负责构建一个实体管理器,并且将该实体管理器注入到Bean 中.

=======================================================
2.在容器外部使用
Persistence 构造一个EntityManagerFactory , 然后再构造EntityManager.
Code:
EntityManagerFactory emf = Persistence.createEntityManagerFactory()
EntityManager em = emf.createEntityManager()
写persistence.xml
持久化单元名,在一个persistence.xml 中可以有多个持久化单元,用名字来区分.
如果只有一个就可以省略不写.
: 告诉容器持久化提供者是哪一个
: 数据源的位置(JNDI 名称)
: 表的生成策略
希望对你有帮助
以上就是关于往DAO类中注入@PersistenceContext和@Resource的区别全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!











