当前位置: 首页 > 知识库问答 >
问题:

什么是正确的注释,以便我可以获得自动加载的EntityManagerFactory?

穆轶
2023-03-14

我需要在Spring boot应用程序中使用的类中获得一个自动连接的EntityManagerFactory。我认为问题的根源是我的类在一个单独的包中。

我生成了一个简单的示例案例来说明我正在尝试做什么。

这是应用程序类:

package test;

import javax.persistence.EntityManagerFactory;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import test2.GetEMF;

@SpringBootApplication
public class AutoWiredTest implements CommandLineRunner {
  @Autowired
  private EntityManagerFactory emf;

  @Override
  public void run(String... args) 
  throws Exception {
    if( emf == null )
      System.out.println("Top: EMF is null");
    else
      System.out.println("Top: Got EMF instance");      
    new GetEMF();
 }
  
  public static void main(String[] args) 
  throws Exception {
    SpringApplication.run(AutoWiredTest.class, args);
  }
}

这是不同包中的GetEMF类:

package test2;

import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import org.springframework.beans.factory.annotation.Autowired;

@PersistenceContext
public class GetEMF {
  @Autowired
  private EntityManagerFactory emf;
  
  public GetEMF() {
    if( emf == null )
      System.out.println("Inner: EMF is null");
    else
      System.out.println("Inner: Got EMF instance");      
  }
}

当我运行代码时,我得到以下输出:

Top: Got EMF instance
Inner: EMF is null

通过在线阅读,我认为@PersistenceContext注释可以填充emf,但事实并非如此。

我知道看起来我可以简单地将emf的引用传递给GetEMF构造函数,但这是简单测试用例的一个怪癖。这对我的申请不起作用。我必须从环境中获得一个EntityManagerFactory。

共有1个答案

元叶秋
2023-03-14

GetEMF中的emf字段为null,因为您自己创建了实例:

new GetEMF();

如果您希望Spring注入依赖项,例如注入到自动连接的字段中,那么实例需要是Spring管理的bean。

您可以使用@Component注释GetEMF,然后将其自动连接到AutoWiredTest中。

 类似资料:
  • 问题内容: 我已使用批注将其用于获取计算的属性。我需要的是那些用注解注解的字段/获取器应延迟加载。 这甚至有可能吗? 谢谢 问题答案: 是的。只需使用@Basic(fetch = FetchType.LAZY) 注释属性的字段/ 获取器,然后使用hibernate提供的此ant任务即可为实体类进行字节码检测。否则,将默默忽略该属性的LAZY加载。 该文档包含有关如何使用此ant任务进行字节码检测的

  • 问题内容: 我想知道是否有一种方法可以指定在类方法之前调用方法。我知道这样的事情应该是可能的,因为JUnit具有before(),所以我想做的事情是相似的。 这是我想做的一个具体例子 基本上我想要一个注释在foo()之前告诉编译器或jvm调用init() 问题答案: 如果有的话,您可以使用此接口的实例和方法的内部包装,您可以自由检查方法是否带注释,并根据该方法执行一些操作: 或者,您可以尝试使用A

  • 问题内容: 我正在创建一个小型Java Jpanel游戏,其中应该有一个火箭,它通过箭头上下移动,并通过太空射击。 触发方法应按以下方式工作:按下空格键,东西触发并在屏幕上移动,然后当它碰到某个x时,它就会消失。此外,您只能发射一次,直到另一颗子弹消失为止。 我不知道我在做什么错。首先,在我的代码启动后,您会看到子弹在屏幕上飞舞。 2,子弹没有消失。 第三,即使其他子弹仍然可见,它也允许我再次开火

  • 问题内容: 我在看注释: 我对最后一部分感到困惑: 我不确定它是如何工作的,也不知道如何使用它。据我了解,Java 8下的任何内容都不允许在同一元素上重复注释。 有人可以澄清吗? 问题答案: 之所以存在NotEmpty.List,是为了避免无法对同一元素重复相同的注释。借助于NotEmpty.List,可以将多个NotEmpty批注有效地应用于一个元素。注释处理通过NotEmpty注释列表(即No

  • 问题内容: 我正在编写一个具有静态外部“外壳”和动态内容部分的Web应用程序。用户浏览系统时,动态内容部分具有许多更新。加载新的内容块时,还可以选择加载另一个JavaScript文件。我以良好的内务管理名义,从DOM中删除了适用于旧内容块的脚本块,因为不再需要JavaScript。 接下来是问题,当我意识到尽管我已经从DOM中删除了该元素,但是先前评估过的JavaScript仍然可以执行。这当然是

  • 我尝试获取指纹值并存储它。在那之后,我试着比较一下 指纹的价值来自另一个硬件,指纹 传感器。 问题1。能比较一下吗? 问题2。如果可能,我如何获得该值? 我搜索了这些问题,发现这是不可能的。但我觉得 获取指纹信息的方法是存在的。我想要一个明确的答案。很抱歉 没有上传任何代码,我已经尽我所能搜索了。