gpt4 book ai didi

java - 在非 Maven-Non-Spring 项目中包含 Maven-Spring-Roo-Hibernate jar 的正确步骤是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 07:26:09 26 4
gpt4 key购买 nike

我正在使用 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 clean 安装包并将 jar 包含在外部项目中并执行相同的代码:

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

我收到“实体管理器尚未注入(inject)(Spring Aspects JAR 是否配置为 AJC/AJDT 方面库?)”

我尝试在 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();
}
}

...我得到同样的错误:“尚未注入(inject)实体管理器(Spring Aspects JAR 是否配置为 AJC/AJDT 方面库?)”

查看生成的 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() ,但当项目被 jarred 并包含在外部项目中时,它就不会初始化。如何手动初始化entityManager?或者,当 Spring 项目将其用作包含的库来初始化实体管理器时,是否有另一种方法来初始化上下文?

最佳答案

因为应用程序上下文不知道模型。您正在从应用程序上下文中创建模型。如果您使用 getBean("MyUser") 获取模型;类似的事情会起作用。否则自动连接模型并使用该模型进行增删改查操作。

您可以在MyUser中看到以下代码 - @PersistenceContext rotected transient 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());
}
}

关于java - 在非 Maven-Non-Spring 项目中包含 Maven-Spring-Roo-Hibernate jar 的正确步骤是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18512594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com