2016-09-28 2 views
0

Цели: обновить некоторые столбцы одной таблицы с заданным списком первичных ключей и возврат упорядоченного INT [], чтобы указать, является ли обновление строки успешно или нетSpring обновление JPA данные несколько строк

запроса (не родной):

метод
update MyEntity e set e.col_1 = :v1, e.col_2 = :v2 where e.id in :ids 

Пружина данных JPA:

@Modifying(clearAutomatically = true) 
@Transactional 
public int updateCols(@Param("v1") String v1, @Param("v2") String v2, @Param("ids") List<Long> idList); 

Пружина JpaTransactionManager используется

Вопросы: 1) Только с данными Spring JPA, как это сделать? (настроить репозиторий не вариант из-за больших существующих кодов), мы хотим добиться эффектов, эквивалентных пакетному обновлению JDBC только с данными Spring JPA.

2) Возможно ли, что данные весны JAP вернут целое число вышеописанным методом обновления, что меньше размера списка входных данных? Если это может произойти, как мы узнаем, какой из моих входных списков не удалось? В любом порядке?

3) Заметил, что после того, как вышеуказанный метод успешно завершен, строки базы данных не обновляются вообще. Как мы можем принудительно синхронизировать его с базой данных с данными весны jpa?

4) Если обновление объекта не сбрасывается весенними данными JPA, то даже мы обновляем один за другим, а не в пакете, но мы не увидим изменения базы данных? Заранее спасибо

ответ

0

Я использую «in» для обновления нескольких наборов строк.

я использовал запрос обновление user_Record установить электронную почту =: uname где идентификатор в ("+ ид +") для обновления данных в таблице user_data

CREATE TABLE user_record ( ID VARCHAR(50) NOT NULL COLLATE 'utf16_bin', почта VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf16_bin', имя VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf16_bin', PRIMARY KEY ( идентификатор ) )

@RequestMapping(value = "/updateSums/{id}", method = RequestMethod.GET) 
public String updateFew(@PathVariable String id ,Model model) 
{ 
    EntityManager em = entityManagerFactory.createEntityManager(); 
    id= id.replace(",", "','"); 
    id= "'"+id+"'"; 
    em.getTransaction().begin(); 
    System.out.println(); 
    em.createNativeQuery("update user_Record set email= :uname where id in ("+id+")", UserRecord.class) 
      .setParameter("uname", "[email protected]") 
      .executeUpdate() 
      ; 

    em.getTransaction().commit(); 

    return "user_one"; 
} 

terminal log in this pic

надеюсь, что это сработает для вас! !

0

Прежде всего, AFAIK Spring Data JPA не может существовать самостоятельно, это всего лишь вещь, основанная на открытой JPA. Он должен использовать Hibernate или любой другой поставщик JPA под капотом.

https://github.com/colonder/Spring-Hibernate-JavaFX-Invoices

Посмотрите на мой репозиторий. Это Hibernate + Spring Boot + Spring Data JPA + Java FX 8, но я думаю, что это поможет вам немного. My repo следует за шаблоном MVC и использует Spring-менеджер транзакций, как и ваш. Что касается вопросов 3 и 4 AFAIK Hibernate (потому что это то, что Spring Data JPA использует в моем случае в качестве поставщика) обновляет строки в БД, а не в приложении. Проблема должна заключаться в том, что обновленные строки в БД не видны в приложении, а не наоборот.

Смежные вопросы