2016-09-28 3 views
0

목적 : 기본 키의 주어진 목록에서 같은 테이블의 일부 열을 업데이트하고 반환 INT [] 행 업데이트가 성공할 경우 표시 안함스프링 데이터 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) 스프링 데이터 JPA 만 사용하면 어떻게 할 수 있습니까? (커다란 기존 코드로 인해 저장소가 아닌 옵션을 사용자 정의), Spring 데이터 JPA만으로 JDBC 배치 업데이트와 동일한 효과를 얻고 싶습니다.

2) 스프링 데이터 JAP가 위의 업데이트 방법으로 입력 목록 크기보다 작은 정수를 반환 할 수 있습니까? 그러한 일이 발생할 수 있다면 입력 목록에있는 입력란 중 어느 것이 실패했는지 어떻게 알 수 있습니까? 어떤 순서로든?

3) 위의 방법을 성공적으로 완료 한 후 데이터베이스 행이 전혀 업데이트되지 않는 것으로 나타났습니다. 어떻게 스프링 데이터 jpa로 데이터베이스와 동기화 할 수 있습니까?

4) 엔티티 업데이트가 스프링 데이터 JPA로 플러시되지 않으면 일괄 처리 대신 하나씩 업데이트해도 데이터베이스가 변경되지는 않습니다. 미리 감사드립니다.

답변

0

i 행 집합 업데이트를 위해 "in"을 사용합니다.

은 내가 = 쿼리 갱신 user_Record 이메일을 설정 사용 : UNAME 곳 테이블 _ 데이터의 업데이트 데이터 ("+ 아이디 +")의 ID

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 ( ID ) )

@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이지만, 조금 도움이 될 것입니다. 내 repo는 MVC 패턴을 따르고 Spring 트랜잭션 관리자를 사용한다. 질문 3과 4에 관해서는 AFAIK Hibernate (스프링 데이터 JPA가 내 경우 공급자로 사용하기 때문에)는 응용 프로그램이 아니라 DB의 행을 업데이트합니다. 문제는 DB의 업데이트 된 행이 앱에서 보이지 않고 반대가되는 것입니다.

관련 문제