用@Autowired和@PersistenceContext注释EntityManager有什么区别?应该首选哪一个?

时间:2019-05-28 16:45:30

标签: spring-boot jpa spring-data-jpa

我正在使用spring-boot-starter-data-jpa开发Spring-Boot应用程序。我无法理解应该使用哪个注释来注入EntityManager? @Autowired@PersistenceContext

我知道@PersistenceContext是JPA批注,而@Autowired属于Spring。但是在内部如何发挥作用呢? 我已经看过this。但无法理解确切原因。

1 个答案:

答案 0 :(得分:1)

数据源是数据源。例如,这可能是数据库。

如果需要多个数据源,一个选择是在persistence.xml文件中定义它们。在这里您可以定义多个名称,并按名称将其分开。

然后,

@PersistenceContext将为您注入更多想要的细节。在这里,您可以通过定义的名称选择哪个数据源。也有其他选择。 https://docs.oracle.com/javaee/7/api/javax/persistence/PersistenceContext.html

如果使用@Autowire,则只是按bean名称注入可用的持久性上下文。如果您有2个或更多持久性上下文,则可能由于歧义而失败。