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

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

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

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

02.11.2016, 20:09. Просмотров 403. Ответов 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, а вот вопрос, как же сделать, чтобы коммит происходил перед тем как идет сравнение таблиц...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2016, 20:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос JPA persistence не сохраняет данные в бд (Java БД):

Влияет ли на быстродействие EntityManager количество классов сущностей в persistence-unit - Java БД
Влияет ли на быстродействие EntityManager количество классов сущностей в persistence-unit? (Не инициализации, а уже при работе с данными).

JPA - Java БД
Задали задание с темой : работа с БД на основе объектно-реляционного отображения (JPA). Скажите что именно здесь подразумевается сделать? И...

JPA. JOIN и WHERE - Java БД
Здравствуйте! Не могу понять как такой запрос выполнить средствами JPA. SELECT games.* FROM games LEFT JOIN games_players ON...

Не активизируется JPA из сервлета - Java БД
Возникла проблема с использованием JPA. Если создаю просто класс для запуска приложения с методом main. В нем создаю EntityManagerFactory и...

Не сохраняет данные в БД - C#
Добрый день, не могу второй день решить проблему. При попытки добавить новую запись в БД, она появляется в ДатагридФью, но в БД так и не...

Dbgrid не сохраняет данные - Delphi БД
Всем привет! подскажите пожалуйста...уже дня 3 сижу и понять не могу что не так не сохраняет и все в form1.dbgrid1 двойным кликом...

2
ninjacut
149 / 149 / 44
Регистрация: 30.04.2016
Сообщений: 321
02.11.2016, 20:49 #2
Вызывай session.flush()
0
Fene4ka_
91 / 91 / 16
Регистрация: 24.01.2014
Сообщений: 1,215
02.11.2016, 20:52  [ТС] #3
ninjacut, у меня нету session, у меня есть entityManager, и я на нем вызываю flush, но это не помогает
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2016, 20:52
Привет! Вот еще темы с ответами:

Неправильно сохраняет данные - C++
Не могу понять в чем проблема. Каждый раз при вводе новых данных, изменяются старые. Вот код: #include &lt;conio.h&gt; #include &lt;iostream&gt; ...

Скрипт не сохраняет данные в бд. - MySQL
Здравствуйте. Пытаюсь заставить работать скрипт-хостинг картинок. Пока на локалхост. Скрипт называется Wussa. Использую Denwer. Указал путь...

Не сохраняет данные после записи - C#
Добрый вечер форумчани. Не могу понять в чем проблема. Есть связь с БД (SQL) и программная оболочка на C#. Существует форма на которой есть...

PatternSmith Программа не сохраняет данные - Софт
Добрый день. Помогите, пожалуйста, разобраться с такой проблемой. Купил программу PatternSmith (расскрой ткани), вроде всё нормально...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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