Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从LocalContainerEntityManagerFactoryBean创建EntityManager_Java_Spring_Jpa_H2_Entitymanager - Fatal编程技术网

Java 如何从LocalContainerEntityManagerFactoryBean创建EntityManager

Java 如何从LocalContainerEntityManagerFactoryBean创建EntityManager,java,spring,jpa,h2,entitymanager,Java,Spring,Jpa,H2,Entitymanager,我正在尝试为JPADAO类编写JUnit测试 类的构造函数需要EntityManager,因此我尝试使用 LocalContainerEntityManagerFactoryBean创建一个 一旦我创建了LocalContainerEntityManagerFactoryBean,我就调用它的getObject,希望检索EntityManagerFactory以允许我创建EntityManager,但是getObject返回Null 我也尝试过getNativeEntityManagerFact

我正在尝试为JPADAO类编写JUnit测试

类的构造函数需要EntityManager,因此我尝试使用 LocalContainerEntityManagerFactoryBean创建一个

一旦我创建了LocalContainerEntityManagerFactoryBean,我就调用它的getObject,希望检索EntityManagerFactory以允许我创建EntityManager,但是getObject返回Null

我也尝试过getNativeEntityManagerFactory,但它也返回Null

我做错了什么

我使用H2作为数据库,但这不会有任何区别

代码如下:

Map<String, String> properties = new HashMap<>();
properties.put("javax.persistence.jdbc.driver", "org.h2.Driver");
properties.put("javax.persistence.jdbc.url", "jdbc:h2:mem:MyUnitTest");

Properties addProperties = new Properties();
addProperties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
addProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect");

LocalContainerEntityManagerFactoryBean emfCB = new LocalContainerEntityManagerFactoryBean();
emfCB.setPersistenceProviderClass(org.eclipse.persistence.jpa.PersistenceProvider.class);
emfCB.setPackagesToScan("com.something.mymodel");
emfCB.setPersistenceUnitName("myUnit");
emfCB.setJpaPropertyMap(properties);
//emf.setLoadTimeWeaver(new ReflectiveLoadTimeWeaver()); -> This doesn't work
emfCB.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());

JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
emfCB.setJpaVendorAdapter(vendorAdapter);
emfCB.setJpaProperties(addProperties);

EntityManagerFactory emf = emfCB.getObject(); // -> This is Null !

MyDao dao = new MyDao(emf);

您应该使用这种类型的测试或一些模拟从以下链接查看Spring集成测试的文档:谢谢各位,我不想使用模拟,尽管使用H2我在模拟数据库,但我希望代码与它进行交互,就像它是真实的DB一样,而不是通过mockito等@Geo和我阅读了与LocalContainerEntityManagerFactoryBean相关的部分,但其中没有非常有用的内容,也没有关于如何创建EntityManager的完整示例。如果您使用集成测试策略并正确配置了LocalContainerEntityManagerFactoryBean,您可以轻松地在测试中注入EntityManagerFactory,从那里您可以检索EntityManager