Форум программистов, компьютерный форум CyberForum.ru

Java и базы данных

Войти
Регистрация
Восстановить пароль
 
Fene4ka_
87 / 87 / 16
Регистрация: 24.01.2014
Сообщений: 1,196
#1

JPA persistence не сохраняет данные в бд - Java БД

02.11.2016, 20:09. Просмотров 300. Ответов 2
Метки нет (Все метки)

Имеется dao:
DAO

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@Repository
public abstract class JpaDao<T extends Serializable> implements IJpaDao<T>{
    @Setter @Getter
    @PersistenceContext
    private EntityManager entityManager;
 
    @Setter
    private Class<T> entityClass;
 
    public JpaDao(){
    }
 
 
    public T findById(long id){
        return entityManager.find(entityClass, id);
    }
 
    public List<T> getAll(){
        return entityManager.createQuery("select * from " + entityClass.getName()).getResultList();
    }
 
    public void add(T entity) throws DaoException {
        try {
            entityManager.persist(entity);
            entityManager.flush();
        } catch (Exception e){
            throw new DaoException(e.getMessage(), e);
        }
    }
 
    public void update(T entity){
        entityManager.merge(entity);
    }
 
    public void delete(T entity){
        entityManager.remove(entity);
        entityManager.flush();
    }
 
    public void deleteById(long id){
        T entity = entityManager.find(entityClass, id);
        delete(entity);
    }
}

тест:
тест

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestDataBaseConfig.class}, loader = AnnotationConfigContextLoader.class)
@TestExecutionListeners({
        DependencyInjectionTestExecutionListener.class,
        DirtiesContextTestExecutionListener.class,
        TransactionalTestExecutionListener.class,
        DbUnitTestExecutionListener.class
})
@DatabaseTearDown(value = "/data/section/section-tear-down.xml")
public class JpaDaoTest{
 
    @Autowired
    private SectionDao sectionDao;
 
    public JpaDaoTest() {
 
    }
 
    @Test
    @DatabaseSetup(value = "/data/section/section-data.xml")
    public void testFindById(){
        Section section = (Section) sectionDao.findById(1);
        Assert.assertEquals("CS:GO", section.getSectionName());
    }
 
    @Test
    @Transactional
    @DatabaseSetup(value = "/data/section/section-data.xml")
    @ExpectedDatabase(value = "/data/section/section-expected-add.xml", assertionMode = DatabaseAssertionMode.NON_STRICT)
    public void testAdd() throws Exception {
        Section section = new Section();
        section.setParentId(0);
        section.setSectionName("LOL");
        sectionDao.add(section);
    }
 
    @Test
    @Transactional
    @DatabaseSetup(value = "/data/section/section-data.xml")
    @ExpectedDatabase(value = "/data/section/section-expected-remove.xml", assertionMode = DatabaseAssertionMode.NON_STRICT)
    public void testDeleteById() throws Exception{
        sectionDao.deleteById(2);
    }
}


Конфигурационный класс:
конфиг

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
@Configuration
@EnableTransactionManagement
@ComponentScan(value = "by.epam.gamerportal")
public class TestDataBaseConfig {
    private static final String PROPERTY_NAME_DATABASE_DRIVER = "com.mysql.jdbc.Driver";
    private static final String PROPERTY_NAME_DATABASE_URL = "jdbc:mysql://localhost:3306/testgameportal2";
    private static final String PROPERTY_NAME_DATABASE_USERNAME = "EvgeniyL";
    private static final String PROPERTY_NAME_DATABASE_PASSWORD = "123";
 
    private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "org.hibernate.dialect.MySQLDialect";
    private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "true";
    private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "by.epam.gamerportal";
    private static final String PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO = "create-drop";
 
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactoryBean.setDataSource(dataSource());
        entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistence.class);
        entityManagerFactoryBean.setPackagesToScan(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN);
 
        entityManagerFactoryBean.setJpaProperties(hibernateProp());
 
        return entityManagerFactoryBean;
    }
 
    @Bean
    public JpaTransactionManager transactionManager() {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
        transactionManager.setDataSource(dataSource());
        return transactionManager;
    }
 
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
 
        dataSource.setDriverClassName(PROPERTY_NAME_DATABASE_DRIVER);
        dataSource.setUrl(PROPERTY_NAME_DATABASE_URL);
        dataSource.setUsername(PROPERTY_NAME_DATABASE_USERNAME);
        dataSource.setPassword(PROPERTY_NAME_DATABASE_PASSWORD);
 
        return dataSource;
    }
 
    private Properties hibernateProp() {
        Properties properties = new Properties();
        properties.put("hibernate.dialect", PROPERTY_NAME_HIBERNATE_DIALECT);
        properties.put("hibernate.show_sql", PROPERTY_NAME_HIBERNATE_SHOW_SQL);
        properties.put("hibernate.hbm2ddl.auto", PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO);
        return properties;
    }
}


Собственно тест на выборку отрабатывает нормально, а вот на добавление и удаление данных не производит какого-либо эффекта на бд. Подскажите плз в чем проблема

Добавлено через 18 часов 38 минут
в принципе проблема понятна, проверка совпадение таблиц происходит перед коммитом в базу данных, решается использую для тестов слой сервиса, на котором висит @Transactional, но вот незадача, нужно тестить именно слой Dao, а вот вопрос, как же сделать, чтобы коммит происходил перед тем как идет сравнение таблиц...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2016, 20:09     JPA persistence не сохраняет данные в бд
Посмотрите здесь:

Не активизируется JPA из сервлета Java БД
Java БД JPA. JOIN и WHERE
Java БД JPA entity manager: немогу поймать исключение при вставке/обновлении данных
Java БД JPA EntityManager.persist : получить id добавленной записи
Java БД Когда JPA(hibernate) использует equals/hashcode у entity
JPA Java БД
JPA доступ по имени колонки Java БД
Java БД In-Memory databases с Spring MVC, JPA
Java БД Влияет ли на быстродействие EntityManager количество классов сущностей в persistence-unit
Написание запросов на соединение нескольких таблиц с jpa Java БД
Ошибка в UserServiceTest (spring data jpa) Java БД

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ninjacut
 Аватар для ninjacut
148 / 148 / 44
Регистрация: 30.04.2016
Сообщений: 319
02.11.2016, 20:49     JPA persistence не сохраняет данные в бд #2
Вызывай session.flush()
Fene4ka_
87 / 87 / 16
Регистрация: 24.01.2014
Сообщений: 1,196
02.11.2016, 20:52  [ТС]     JPA persistence не сохраняет данные в бд #3
ninjacut, у меня нету session, у меня есть entityManager, и я на нем вызываю flush, но это не помогает
Yandex
Объявления
02.11.2016, 20:52     JPA persistence не сохраняет данные в бд
Ответ Создать тему
Опции темы

Текущее время: 11:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru