Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конфигурация h2(in Memory) for eM.persist(user)? 
V
    Опции темы
Killer_13
  Дата 21.5.2013, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Господа, очень не осведомлен с темой, но нужно сделать(сконфигурировать, а не получается).

Зничт пишу тесты в(для) "in-memory Database".
вызов таких функций как execute, query через entityManager проходят - все в порядке, такие тесты работают, но столкнулся спроблемой.
Нужно entityManager.persist(user), entityManager.merge(user) вызивать, вот тут то и крешится все...
Я понимаю, что нужно что-то как-то поднастроить. Может кто поможет, подскажет?
Вот так вот пока-что все настроено...

Благодарствую.

Код


<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.1.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">

    <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    <!-- Persistence: JPA, transactions and Spring Data with In-Memory H2 Database -->

    <tx:annotation-driven />

    <jpa:repositories base-package="com.model.security" />
    <jpa:repositories base-package="com.service" />

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" />

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" p:dataSource-ref="dataSource"
        p:persistenceUnitName="backofficePersistenceUnit" p:packagesToScan="com.backoffice.**.*">
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" p:database="H2" p:databasePlatform="org.hibernate.dialect.H2Dialect"
                p:showSql="true" p:generateDdl="true" />
        </property>
    </bean>

    <bean name="backofficeRoleDao" class="com.dao.BackofficeRoleDao" autowire="byName">
    </bean>

    <bean name="backofficeUserDao" class="com.dao.BackofficeUserDao" autowire="byName">
    </bean>

    <jdbc:embedded-database id="dataSource" type="H2">
        <jdbc:script location="classpath:schema_h2.sql" />
    </jdbc:embedded-database>

</beans>

PM MAIL   Вверх
Samotnik
Дата 21.5.2013, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Что именно крэшится?

Это сообщение отредактировал(а) Samotnik - 21.5.2013, 20:57
PM MAIL   Вверх
Killer_13
Дата 21.5.2013, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Цитата(Samotnik @ 21.5.2013,  20:51)
Что именно крэшится?

Забыл стекТрейс. (((

я не могу сконфигурировать h2, чтоб срабатывало "entityManager.persist(user)". Нужно как-то с Hibernate соединить насколько я понимаю..
User user в данном случае entyty.

Подскажите, что я не правильно описал, постараюсь поподробней..

PM MAIL   Вверх
Samotnik
Дата 21.5.2013, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Killer_13, что можно сказать по конфиг файлу? Где ошибка? 
PM MAIL   Вверх
Killer_13
Дата 21.5.2013, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Цитата(Samotnik @ 21.5.2013,  21:11)
Killer_13, что можно сказать по конфиг файлу? Где ошибка?

Ошибки в нем нет. Я могу вызывать из EM select, execute... - все работает.
А вот когда вызываю или persist(MyEntity) или merge(MyEntity). Тоисть когда пытаюсь сохранить объект вот так, а не через обычный sql.
PM MAIL   Вверх
Killer_13
Дата 22.5.2013, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Для полноты, все вместе...

Вот тест ф-ция: BackofficeUserDaoTest
Код

@ContextConfiguration(locations = { "classpath:spring/test-context.xml" })
public class BackofficeUserDaoTest extends ModernAbstractTransactionalTestNGSpringContextTests {

.....

    @Inject
    private BackofficeUserDao backofficeUserDao;

    @Test
    public void saveUser(){
        BackofficeUser user = new BackofficeUser();
        user.setUserId(13L);
        
        backofficeUserDao.saveUser(user);
    }

.......


Вот сама ф-ция:BackofficeUserDao.java
Код

    public void saveUser(BackofficeUser user) {
        if (user != null && user.getUserId() != null && getBackofficeUser(user.getUserId()) != null) {
            entityManager.merge(user);
            LOG.debug("BackofficeUser with id " + user.getUserId() + " updated.");
        } else {
            entityManager.persist(user);
            LOG.debug("BackofficeUser with id " + user.getUserId() + " created.");
        }
    }

Вот коф-файл:spring/test-context.xml
Код

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.1.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">

    <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    <!-- Persistence: JPA, transactions and Spring Data with In-Memory H2 Database -->

    <tx:annotation-driven />

    <jpa:repositories base-package="com.xxwell.tk.backoffice.model.security" />
    <jpa:repositories base-package="com.xxwell.tk.backoffice.service" />


    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" />

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" p:dataSource-ref="dataSource"
        p:persistenceUnitName="backofficePersistenceUnit" p:packagesToScan="com.xxwell.tk.backoffice.**.*">
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" p:database="H2" p:databasePlatform="org.hibernate.dialect.H2Dialect"
                p:showSql="true" p:generateDdl="true" />
        </property>
    </bean>

    <bean name="backofficeRoleDao" class="com.xxwell.tk.backoffice.dao.BackofficeRoleDao" autowire="byName">
    </bean>

    <bean name="backofficeUserDao" class="com.xxwell.tk.backoffice.dao.BackofficeUserDao" autowire="byName">
    </bean>


    <jdbc:embedded-database id="dataSource" type="H2">
        <jdbc:script location="classpath:schema_h2.sql" />
    </jdbc:embedded-database>

</beans>



Вот стек трейс
Код

FAILED: saveUser
org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: com.xxwell.tk.backoffice.model.security.BackofficeUser; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: com.xxwell.tk.backoffice.model.security.BackofficeUser
    at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:668)
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:104)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:403)
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:58)
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:163)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)
    at com.xxwell.tk.backoffice.dao.BackofficeUserDao$$EnhancerByCGLIB$$8e1e5a51.saveUser(<generated>)
    at com.xxwell.tk.backoffice.dao.BackofficeUserDaoTest.saveUser(BackofficeUserDaoTest.java:48)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
    at org.testng.internal.MethodInvocationHelper$1.runTestMethod(MethodInvocationHelper.java:200)
    at org.springframework.test.context.testng.AbstractTestNGSpringContextTests.run(AbstractTestNGSpringContextTests.java:158)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:212)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:707)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
    at org.testng.TestNG.run(TestNG.java:1057)
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: com.xxwell.tk.backoffice.model.security.BackofficeUser
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:127)
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
    at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:808)
    at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:782)
    at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:786)
    at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:672)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)
    at $Proxy36.persist(Unknown Source)
    at com.xxwell.tk.backoffice.dao.BackofficeUserDao.saveUser(BackofficeUserDao.java:30)
    at com.xxwell.tk.backoffice.dao.BackofficeUserDao$$FastClassByCGLIB$$1e2f7021.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
    at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:155)
    ... 37 more


===============================================
    Default test
    Tests run: 6, Failures: 1, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 6, Failures: 1, Skips: 0
===============================================


Надеюсь теперь кто-то подскажет. ) 
Спасибо!
PM MAIL   Вверх
Samotnik
Дата 23.5.2013, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Killer_13, а говоришь нет ошибки smile
Как entityManager в классе BackofficeUserDao инициализируется? 

Это сообщение отредактировал(а) Samotnik - 23.5.2013, 21:26
PM MAIL   Вверх
Killer_13
Дата 23.5.2013, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



))) Пасиб, догнал как сделать.
Я просто в свой тест класс взял entityManager потом после вызова функции в которой вызывался entityManager.persist() я вызываю entityManager.fetch() и спокойно получаю запросом свой объект из БД. )

Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1272 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.