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

Java 在非Maven非Spring项目中包含Maven Spring Roo Hibernate jar的正确过程是什么?,java,spring,hibernate,maven,spring-roo,Java,Spring,Hibernate,Maven,Spring Roo,我正在使用Spring Roo生成一组Hibernate对象,在同一项目的单元测试中,如果我执行以下操作,我可以成功地对数据库进行读写: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath*:/META-INF/spring/applicationContext.xml"}) public class SomeTest extends AbstractJUnit4Sprin

我正在使用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());
我得到“实体管理器还没有被注入(SpringAspectsJAR是否配置为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();
    }   
}
。。。我得到了同样的错误: “尚未注入实体管理器(Spring方面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(),而当项目被震动并包含在外部项目中时,它就不会初始化MyUser.entityManager()。如何手动初始化entityManager?或者,当spring项目将上下文用作包含的库来初始化entityManager时,是否有其他方法来初始化它?

因为应用程序上下文不知道模型。您正在appcontext之外创建模型。如果您使用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());
       }
    }

因为应用程序上下文不知道模型。您正在appcontext之外创建模型。如果您使用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());
       }
    }

我想你误解了这个问题,ProjectA是一个Maven-SpringRoo-Hibernate项目,单元测试在ProjectA中运行良好,ProjectB是一个非Maven、非spring、非Hibernate项目。ProjectA被编译成一个JAR文件,并作为依赖项包含在ProjectB中,ProjectB随后使用这些Hibernate对象,但由于上下文没有通过ProjectB在ProjectA中初始化,所以它失败了。我想知道的是如何在projectB中包含projectA.jar,并且仍然能够在projectB中使用projectA中的Hibernate对象。我想你误解了这个问题,projectA是一个Maven SpringRoo Hibernate项目,单元测试在projectA中运行良好,projectB是一个非Maven、非spring、非Hibernate项目。ProjectA被编译成一个JAR文件,并作为依赖项包含在ProjectB中,ProjectB随后使用这些Hibernate对象,但由于上下文没有通过ProjectB在ProjectA中初始化,所以它失败了。我想知道的是如何在projectB中包含projectA.jar,并且仍然能够在projectB中使用projectA中的Hibernate对象。