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

在非Maven非Spring项目中包含Maven Spring Roo Hibernate jar的正确过程是什么?

孙和安
2023-03-14

我正在使用Spring Roo生成一堆Hibernate对象,在同一项目的单元测试中,如果我这样做,我可以成功地读写到数据库:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "classpath*:/META-INF/spring/applicationContext.xml"})
public class SomeTest extends AbstractJUnit4SpringContextTests {

@Test
public void someTest() throws Exception {
    MyUser myUser = MyUsers.findByUserId(123);
    System.out.println(myUser.getFirstName());
}
....

现在,如果我做一个mvn干净安装包并将jar包含在一个外部项目中并执行相同的代码:

MyUser myUser = MyUsers.findByUserId(123);
System.out.println(myUser.getFirstName());

我得到“实体管理器尚未注入(Spring Aspects JAR是否配置为AJC/AJDT Aspect库?)

我尝试过在Spring Roo Hibernate项目中创建一个类,比如这样,并在上面添加ContextConfiguration:

@Service
@ContextConfiguration(locations = { "classpath*:/META-INF/spring/applicationContext.xml"})
public class SomeClassImpl {

    public MyUser doSomething(){

        MyUser myUser = MyUsers.findByUserId(123);
                return myUser;

    }

}

现在,当我在外部项目中调用doSomething()时:

public class TestDatabase {
    public static void main(String[] args){

        SomeClassImpl k = new SomeClassImpl();
        k.doSomething();
    }   
}

…我得到了相同的错误:“实体管理器尚未注入(Spring Aspects JAR是否配置为AJC/AJDT Aspect库?)

查看生成的 AspectJ 代码

privileged aspect MyUser_Roo_Jpa_ActiveRecord {

    @PersistenceContext
    transient EntityManager MyUser.entityManager;

    public static final EntityManager MyUser.entityManager() {
        EntityManager em = new MyUser().entityManager;
        if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
        return em;
    }

...我可以看到@PersistenceContext应该初始化MyUser.entityManager(),但当项目受到干扰并包含在外部项目中时,它并没有初始化。如何手动初始化entityManager?或者,当spring项目将上下文用作包含库来初始化entityManager时,是否有其他方法来初始化上下文?

共有1个答案

费明诚
2023-03-14

因为应用程序上下文不知道模型。您正在从应用程序上下文中创建模型。如果您使用getBean(“MyUser”)获取模型;类似的东西会起作用。否则自动连接模型并将该模型用于您的crud操作。

您可以在MyUser-@PersistenceContext-Protected transient EntityManager EntityManager中看到以下代码:;那么只有entityManager对象将在Myuser中初始化。

   @RunWith(SpringJUnit4ClassRunner.class) 
   @ContextConfiguration(locations = { "classpath*:/META-INF/spring/applicationContext.xml"})
   public class SomeTest extends AbstractJUnit4SpringContextTests {

       @Autowired
       MyUser myUser; // use this object for ur crud operations 

       @Test
       public void someTest() throws Exception {                
           MyUser otherObject= myUser.findByUserId(123);
           System.out.println(otherObject.getFirstName());
       }
    }
 类似资料:
  • 首先,我在netbeans中创建java项目,我想将netbeans中的java项目导入到eclipse kepler中的maven项目中,我尝试了一次,但是在eclipse kepler中编译时出错,但是如果在eclipse kepler中导入java项目并进行编译,就可以了。

  • 问题内容: 我正在考虑如何使Android的支持库在Eclipse之外包含和编译。我使用Linux作为构建环境,没有使用任何IDE来创建应用程序,仅使用基本的Android SDK。我仅获得了有关Eclipse的此问题的答案,但是如何仅使用Ant和Android SDK呢? 问题答案: 假设您没有使用: 步骤1:将SDK 复制或从SDK 复制到项目目录中。 步骤2:没有步骤2。 选择是否要使用本机

  • 问题内容: 我继承了一个当前在eclipse中构建的Web项目(Servlets)。 我想在它周围添加行家。但是项目的源目录未遵循maven约定。而不是在src / main / java内部,而是src / package / name / … 我现在不想更改任何内容,因为它们正在全速朝着一个里程碑迈进。我可以配置maven接受src /作为java源目录吗?谢谢 问题答案: 只需在本节中将其添

  • 我有一个项目,它不是spring应用程序。我正在尝试在其中使用AspectJ注释。注释类是从我的另一个jar中引用的。我在下面提到了POM的插件部分。我的构建成功了,但是Maven的控制台输出从来没有提到任何关于AspectJ插件的内容,而且当我运行我的项目时,注释也不起作用。 我几个小时来一直想弄清楚出了什么问题,但还是搞不清楚。 这是Jar中定义的两个依赖项,我试图将它用作方面库。 [DEBU

  • 我们面临的最大问题是,我们无法找出如何构造项目C,以使其在项目A和B中都能正常工作。在项目A中,我们希望maven能像往常一样工作,并根据需要降低依赖项。但我们也希望在项目B(也许结合Nexus+Tycho??)中实现该功能。 我们应该如何解决这个问题。我还没有找到一个好的解决办法如何做这件事。我已经在maven中尝试了apache felix捆绑插件,但不能让它像我想要的那样工作。这是正确的解决

  • 我读过一些教程, https://spring.io/guides/gs/spring-boot/ https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-gradle-plugin