我使用Spring Roo的生成一堆的Hibernate對象,裏面在同一個項目我的單元測試,如果我這樣做,我可以成功讀取,寫入數據庫:在非Maven-Non-Spring項目中包含Maven-Spring-Roo-Hibernate jar的正確過程是什麼?
@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配置爲AJC/AJDT方面庫)實體管理器尚未被注入」
MyUser myUser = MyUsers.findByUserId(123);
System.out.println(myUser.getFirstName());
我得到
我試過創建ac拉斯春節-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();
}
}
...我得到同樣的錯誤: 「實體管理器尚未被注入(是春節因素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(),當項目被震動幷包含在外部項目中時,它不是。如何去手動初始化entityManager?還是有另一種方式來初始化在春季項目中的上下文時,它將它作爲一個包含的庫來初始化entityManager?
如何創建該實體管理器? –
更新了答案。請你現在試試吧 – Prabhakaran
我認爲你誤解了這個問題,ProjectA是一個Maven-SpringRoo-Hibernate項目,單元測試在ProjectA中工作正常,ProjectB是一個非Maven,非Spring的非Hibernate項目。 ProjectA被編譯成一個JAR文件並作爲ProjectB中的一個依賴項包含在內,然後projectB使用這些Hibernate對象,但由於上下文不是通過projectB在projectA中初始化的,所以失敗了。我想知道的是如何在projectB中包含projectA.jar並且仍然能夠在projectB中使用projectA中的Hibernate對象。 –