Spring启动持久性上下文注释

时间:2017-09-08 10:22:17

标签: java spring spring-mvc spring-boot spring-annotations

我是Spring Boot的新手,并尝试在Spring启动时创建一个基本的REST示例。我正在从Spring Boot REST example网站获取帮助,以创建一个基本示例。

我对大多数事情都很清楚,但我仍然坚持使用一个注释,该注释用于从数据库中获取数据,代码如下所示

package com.springbootrest.repository;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;

import org.springframework.stereotype.Repository;

import com.springbootrest.model.BookDetails;

@Transactional
@Repository
public class BookDetailsRepoImpl implements BookDetailsRepo {

 @PersistenceContext
 private EntityManager entityManager;

 public List<BookDetails> listBookDetails() {
 return (List<BookDetails>) entityManager.createQuery("FROM BookDetails").getResultList();
 }

}

我不明白这个@PersistenceContext是如何工作的。

任何人都可以解释一下这里发生了什么。

5 个答案:

答案 0 :(得分:2)

example本身,他们已经解释了使用@PersistenceContext背后的概念:

@PersistenceContext - 我们需要了解我们如何使用简单的注释@PersistenceContext连接数据库以及它是什么。

  1. 实体由javax.persistence.EntityManager实例管理 使用持久化上下文。
  2. 每个EntityManager实例都与持久性相关联 上下文。
  3. 在持久化上下文中,实体实例及其实例 生命周期得到管理。
  4. 持久性上下文定义了特定实体的范围 实例已创建,保留和删除。
  5. 持久化上下文就像一个包含一组的缓存 持久化实体,所以一旦交易完成,全部 持久对象与EntityManager的持久性分离 上下文并且不再受管理。

答案 1 :(得分:1)

@PersistenceContext是JPA标准注释,它使您可以更好地控制要注入的持久性上下文。

答案 2 :(得分:0)

  

简而言之,这是使用Entity管理实体的空间(可以这么说)   经理。

答案 3 :(得分:0)

您代码中的 @PersistenceContext 注释用于指示必须自动注入 EntityManager ,换句话说,其生命周期将由容器来运行您的应用程序(这是一件好事)。另一个选择是通过不同的选项让您(应用程序托管)提供所有必需的配置,这些选项都很繁琐(配置文件或Bean),并且存在将应用程序绑定到某些特定于环境的风险配置(这是一件坏事)。

答案 4 :(得分:0)

几年后我的回答就来了,可是。

此注释@PersistentContext与在您的应用程序上下文中定义的另一个bean结合使用:

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

两者一起工作的方式是PersistenceAnnotationBeanPostProcessor将查找适当的EntityManagerFactory来注入实体管理器,在该实体管理器中我们具有用@PersistenceContext注释的属性

我的理解基于以下问题的答案:so question here