Не удалось инициализировать менеджер сущностей через JUNIT - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь создать менеджер сущностей в своем классе 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в котором я пытаюсь создать менеджер сущностей, но все еще не могу успешно это сделать. Посоветуйте, пожалуйста, как преодолеть это, еще одну вещь, которую я заметил, что в моей xml-конфигурации junit entityManager не определено

@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 ****
            }
        }

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

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;
        }
    };
}

}

0 голосов
/ 09 июня 2018

Вы смотрели в документах на Hibernate ?Есть пример, я думаю, это то, что вам нужно.Также есть примеры использования entityManeger с объектами, например this

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...