powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate + Spring не сохраняются entity
10 сообщений из 10, страница 1 из 1
Hibernate + Spring не сохраняются entity
    #37755629
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не сохраняются entity, хотя в тестах save и load "работают".
авторHibernate: insert into fund_info (fundId, lang, name, value, type) values (?, ?, ?, ?, 'site')
select @@identity
1 // получили id

//загрузим то что сохранили
Hibernate: select fundinfo0_.id as id0_, fundinfo0_.fundId as fundId0_, fundinfo0_.lang as lang0_, fundinfo0_.name as name0_, fundinfo0_.value as value0_, fundinfo0_.type as type0_ from fund_info fundinfo0_ where fundinfo0_.fundId=?
// одно из сохраненных полей
values: chief.investment.officer

Можно сделать вывод, что все данные успешно сохраняются в кэше hibernate, а почему не персистится в БД?

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

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

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="packagesToScan" value="ru"/>

        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.Sybase11Dialect</prop>
                <prop key="format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.show_sql">true</prop>
                <!-- Caching -->
                <prop key="hibernate.cache.use_second_level_cache">false</prop>
                <!--<prop key="hibernate.cache.use_query_cache">true</prop>-->
                <!--<prop key="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</prop>-->
            </props>
        </property>
    </bean>



Тест
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:fund-info-servlet.xml"})
public class FundInfoDAOTest {
    @Resource(name = "fundInfoDAO")
    FundInfoDAOImpl fundInfoDAO;

    @Test
    @Transactional
    public void testFundInfoDAO(){
        FundInfo fundInfo = new FundInfo();

        fundInfo.setFundId("2");
        fundInfo.setLang("ru");
        fundInfo.setName(FundInfo.CHIEF_INVESTMENT_OFFICER);
        fundInfo.setValue("blah");

        fundInfoDAO.makePersistent(fundInfo);

        System.out.println(fundInfo.getId());

        List<FundInfo> fundInfoList = fundInfoDAO.getFundInfoByFundId("2");

        for(FundInfo info: fundInfoList){
            System.out.println("values: " + info.getName());
        }


    }
}
...
Рейтинг: 0 / 0
Hibernate + Spring не сохраняются entity
    #37755674
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоН,

В тестах @Transactional означает, что в конце теста пойдет rollback. Если хочешь чтобы база после тестов менялась убери аннотацию или поставь @NotTransactional
...
Рейтинг: 0 / 0
Hibernate + Spring не сохраняются entity
    #37755683
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоН,

Хотя видимо я что то не то ответил, вопрос был не про это. Т.е получается что у тебя вызов dao базу не меняет, а после вызова теста база меняется?
...
Рейтинг: 0 / 0
Hibernate + Spring не сохраняются entity
    #37755687
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vas0,

Нет, дальше тестов дело пока никуда не ушло. База не меняется, только создается при старте.
В другом проекте аналогичный конфиг работает как ожидается.
...
Рейтинг: 0 / 0
Hibernate + Spring не сохраняются entity
    #37755709
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоН,

Я уже запутался и не понимаю в чем вопрос... Хотя я его наверно сразу не понял. Но мне кажется подозрительными след строчки:
Код: java
1.
2.
@Resource(name = "fundInfoDAO")
FundInfoDAOImpl fundInfoDAO;

Здесь возможно идет инжекция сразу реализации, а не через интерфейс. При этом возможно транзакционные атрибуты не работают (хотя это нужно проверять). Мое мнение лучше использовать @Autowired FundInfoDAO fundInfoDAO.
...
Рейтинг: 0 / 0
Hibernate + Spring не сохраняются entity
    #37755814
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vas0
Код: java
1.
2.
@Resource(name = "fundInfoDAO")
FundInfoDAOImpl fundInfoDAO;

Здесь возможно идет инжекция сразу реализации, а не через интерфейс.
Да, все правильно. Эта DAO экстендит еще GenericHibernateDAO, так что использовать методы GenericHibernateDAO (makePersist, ...) можно только при кастинге к предку. В данном случае мне нужно проверить работают ли метод предка GenericHibernateDAO по этому ижектинг сразу реализации интерфейса.

Но все это на мой взгляд не имеет отношения к проблеме.
...
Рейтинг: 0 / 0
Hibernate + Spring не сохраняются entity
    #37755820
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоННо все это на мой взгляд не имеет отношения к проблеме. Так а в чем проблема? Что после вызова теста состояние базы не меняется?
...
Рейтинг: 0 / 0
Hibernate + Spring не сохраняются entity
    #37755846
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vas0ТимоННо все это на мой взгляд не имеет отношения к проблеме. Так а в чем проблема? Что после вызова теста состояние базы не меняется?

Проблема в том что данные после теста не попадают в БД, таблица пуста.
...
Рейтинг: 0 / 0
Hibernate + Spring не сохраняются entity
    #37755867
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоНПроблема в том что данные после теста не попадают в БД, таблица пуста. Это нормально. Транзакционные тесты в спринге оставляют БД в неизменном состоянии (после каждого теста идет rollback, а не commit).

Если уберешь аннотацию @Transactional из тестов, то состояние БД будет меняться.
...
Рейтинг: 0 / 0
Hibernate + Spring не сохраняются entity
    #37755875
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да в лог уже посмотри, у тебя наверняка там Rollback
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate + Spring не сохраняются entity
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]