Spring boot Persistence Context注解

Pri*_*ngh 8 java spring spring-annotations spring-boot

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

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

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();
 }

}
Run Code Online (Sandbox Code Playgroud)

我不明白@PersistenceContext实际是如何工作的 - 谁能解释一下?

Sri*_*911 9

示例中,他们解释了使用 @PersistenceContext 背后的概念:

@PersistenceContext – 我们需要了解如何使用简单的注解@PersistenceContext 和它是什么来连接数据库。

  1. 实体由 javax.persistence.EntityManager 实例使用持久化上下文管理。
  2. 每个 EntityManager 实例都与一个持久化上下文相关联。
  3. 在持久性上下文中,管理实体实例及其生命周期。
  4. 持久化上下文定义了一个范围,在该范围内创建、持久化和删除特定实体实例。
  5. 一个持久化上下文就像一个包含一组持久化实体的缓存,所以一旦事务完成,所有的持久化对象都会从 EntityManager 的持久化上下文中分离出来,不再被管理。


dba*_*tor 6

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


小智 2

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