0

我正在尝试在我的 junit 类中创建实体管理器,但我没有成功,直到请告知我如何才能克服以下是我的实体管理器配置

<bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="persistenceUnitName" value="aaa" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="database" value="ORACLE" />
            </bean>
        </property>
        <property name="jpaPropertyMap">
            <map>
                <entry key="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />
                <entry key="hibernate.cache.use_query_cache" value="false" />
                <entry key="hibernate.show_sql" value="false" />
                <entry key="hibernate.use_sql_comments" value="false" />
                <entry key="hibernate.format_sql" value="false" />
            </map>
        </property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager" />

    <context:component-scan base-package="com.ytr.cyt.tc.*" />

下面是我试图创建实体管理器但仍然无法成功的junit类,请告知如何克服这一点,我观察到的另一件事是在我的junit entityManager的xml配置中不是定义

@ContextConfiguration(locations = { "applicationContext.xml" })
@TransactionConfiguration(defaultRollback=true)
@Transactional
public class test4 {


     @PersistenceContext
        protected static EntityManager em ;


      //***** enetity manager is still null ****
        @BeforeClass
        public static void setUpClass() throws Exception {
            if (em == null) {
                em = (EntityManager) Persistence.createEntityManagerFactory("aaa").createEntityManager();
                System.out.println(em.toString());
                 //***** enetity manager is still null ****
            }
        }
4

2 回答 2

0

您是否查看过Hibernate 的文档?有一个例子,我认为这是你需要的。此外,还有一些将 entityManeger 与实体一起使用的示例,如下所示

于 2018-06-09T07:44:25.683 回答
0

EntityManagerFactory 可以像这样以编程方式初始化:

public class PersistenceTest {

private static EntityManagerFactory emf;

@BeforeClass
public static void init() {

    Map<String, String> properties = new HashMap<>();

    properties.put("javax.persistence.jdbc.driver", "oracle.jdbc.OracleDriver");
    properties.put("javax.persistence.jdbc.url", "jdbc:oracle:thin:@127.0.0.1:1521:XE");
    properties.put("javax.persistence.jdbc.user", "SYS AS SYSDBA");
    properties.put("javax.persistence.jdbc.password", "root");
    properties.put("javax.persistence.transactionType", "RESOURCE_LOCAL");

    properties.put("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");
    properties.put("hibernate.show_sql", "true");
    properties.put("hibernate.format_sql", "true");
    properties.put("hibernate.hbm2ddl.auto", "create");

    emf = new HibernatePersistenceProvider().createContainerEntityManagerFactory(createPersistenceUnitInfo(), properties);
}

private static PersistenceUnitInfo createPersistenceUnitInfo() {
    return new PersistenceUnitInfo() {
        @Override
        public String getPersistenceUnitName() {
            return "test-persistence-unit";
        }

        @Override
        public String getPersistenceProviderClassName() {
            return "org.hibernate.jpa.HibernatePersistenceProvider";
        }

        @Override
        public PersistenceUnitTransactionType getTransactionType() {
            return PersistenceUnitTransactionType.RESOURCE_LOCAL;
        }

        @Override
        public DataSource getJtaDataSource() {
            return null;
        }

        @Override
        public DataSource getNonJtaDataSource() {
            return null;
        }

        @Override
        public List<String> getMappingFileNames() {
            return Collections.emptyList();
        }

        @Override
        public List<URL> getJarFileUrls() {
            return Collections.emptyList();
        }

        @Override
        public URL getPersistenceUnitRootUrl() {
            return null;
        }

        @Override
        public List<String> getManagedClassNames() {
            return Arrays.asList(
                    "com.package.name.TestEntity");
        }

        @Override
        public boolean excludeUnlistedClasses() {
            return false;
        }

        @Override
        public SharedCacheMode getSharedCacheMode() {
            return null;
        }

        @Override
        public ValidationMode getValidationMode() {
            return null;
        }

        @Override
        public Properties getProperties() {
            return new Properties();
        }

        @Override
        public String getPersistenceXMLSchemaVersion() {
            return null;
        }

        @Override
        public ClassLoader getClassLoader() {
            return null;
        }

        @Override
        public void addTransformer(ClassTransformer transformer) {

        }

        @Override
        public ClassLoader getNewTempClassLoader() {
            return null;
        }
    };
}

}

于 2018-06-09T09:24:52.053 回答